C语言初级编程问题。输入两个数,打印出第一个有,第二个没有的数字

要求自己定义函数

第1个回答  2014-11-29

    编写一个函数F(N,a),N:长整数,a长整形指针数组名称.

    F(N,a)函数 从低到高获取N各位数字(不停除10取余数),余数是i,置位 a[i]=1;

    主函数中X,Y.定义数组p[10],q[10],长整形数X,Y.

         输入:用输入函数获取两个整数.

   

         判断:分别用 X,p 和Y,q调用F.

   

         打印:i从0循环到9,如果p[i]和q[i]均等于1,输出i.


实现自己做吧...


这个算法的运行时间是输入数字位数的线性时间.不需要循环嵌套.

比算出一个数的一位,然后循环在第二个数中判断相等效率高.

设 两数分别为J位和K位,第一种算法,循环J+K次.

第二种算法,循环为J*K次.


第一种算法的缺点是 打印出的数字顺序不是在第一个数中出现的顺序.

   

第2个回答  推荐于2016-10-05
#include<queue>
#include<cstdio>

using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
bool vis[18];
void chk(int a,int b)
{
do{
vis[a%10]=1;
a/=10;
}while(a);
do{
if(vis[b%10]==0)
q.push(b%10);
vis[b%10]=1;
b/=10;
}while(b);
return ;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
chk(a,b);
while(q.size()>1)
printf("%d ",q.top()),q.pop();
if(q.empty())
printf("sams number");
else
printf("%d",q.top()),q.pop();
return 0;
}追问

不能用数组。。我们还没学queue是什么 QAQ

追答

要管输出顺序吗?
#include
int vis,first=1;
void chk(int a,int b)
{
do{
vis|=1
int chk(int a,int i)
{
do{
if(a%10==i)
return 1;
a/=10;
}while(a);
return 0;
}
int main()
{
int a,b,i;
int first=1;
scanf("%d%d",&a,&b);
for(i=0;i<=9;i++)
if(chk(a,i)&&(chk(b,i)==0))
{
if(first)
first=0;
else
putchar(' ');
putchar(i+'0');
}
if(first)
printf("the same number");
return 0;
}//要管输出顺序

本回答被提问者采纳
相似回答