这个程序有什么问题?求大神
程序员吧
全部回复
仅看楼主
level 11
cjx34567 楼主
#include<stdio.h>
int fun(int a[10],long ii){int j,iii;for(j=0;j<6;j++){iii=ii%10;ii=ii/10;if(a[iii]==0) return 0;else a[iii]=0;}return 1;}
int fun1(int a[10],long ii){long n;int nn;n=ii*ii;while(n){nn=n%10;n=n/10;if(a[nn]==0) return 0;}return 1;}
main(){long i;int j=0;int flag;int flag1;int a[10];for(j=0;j<10;j++) a[j]=1;for(i=100000;i<1000000;i++){flag=fun(a,i);if(flag){flag1=fun1(a,i);if(flag1) printf("%ld %ld %ld\n",i,i,i*i);}}}
2013年05月31日 14点05分 1
level 4
能不能别发一堆一行行来好吗
2013年05月31日 14点05分 2
level 4
目测我把nn换成N,ii换成t,iii换成T,while(t)永久循环而且返回值没功能,内部变量总是取个位数再左移?这个没看出来什么功能,而且打得太乱太难看了我排好点再来看看
2013年05月31日 15点05分 3
level 4
内部的if判断一下就完了返回值一或者零是吧,循环呢?继续做还是有返回就即停?
2013年05月31日 15点05分 4
level 4
我假设了ii会影响i的值的话(a因为是传地址应该指向同一个数据会影响,但是fun函数定义的形参ii应该是别的存储空间所以应该不影响i吧),fun1不会对i产生值的影响。初始化a:1111111111。第一遍:i=10^5,fun:iii=0,ii=10^4,a[0]=0,return1,fun1:a[0]=0,return0。
第二遍:i=10^4+1,fun:iii=1,ii=10^3,a[1]=0,return1,fun1:n=(10^3)^2,
nn=0, a[0]=0,return0。
第三遍:i=10^3+1,fun:iii=1,ii=10^2,a[1]=0,return0。
第四遍:i=100+1,fun:iii=1,ii=10,a[1]=0,return0。
第五遍:i=10+1,fun:iii=1,ii=1,a[1]=0,return0。
第六遍:i=1+1,fun:iii=0,ii=0,a[0]=0,return0。
第七遍:i=1,fun:iii=0,ii=0,a[0]=0,return0。
第八遍:i=1,fun:iii=0,ii=0,a[0]=0,return0。
结果是个死循环不太好[摇晃]
2013年06月01日 15点06分 7
level 4
观察全局无打印出数是因为flag1根本没有得到1值。
所以问题出在fun1,n=i*i,nn=n%10,n/=10(消去个位数),取到了nn为0或1之外的数时if不满足不return而是继续判断while(由于return1在while循环体之后),由于别忘了n执行了一次/=10消去了刚才的个位数这次从十位数来为nn赋值,n/=10最终都会导致nn总是取到一个0或1(和i的平方有关),那么就总是会得到if(a[0]==0||a[1]==0)return0,就退出fun1函数。
或者说无论i值是什么,经过fun函数的时候以它个位数为序号的数组元素都置0,然后对i*i进行同样的取个位数运算,得到一个新的数,再以这个新的数为序号的数组元素判断是否为0,要知道这个新的数和以前的那个i的个位数是同样的,所以对数组a元素并无实际改观。例如,i=100005,fun函数中:取到个位数为5,那就把a[5]置0。然后经过fun1函数:把100005的平方得10001000025,取个位5,判断a[5]是否等于0?是则return0,退出fun1。在这里看出fun1和fun函数对于i或者i的平方都采用同样的%10(取个位数),a[这个数]指向同一个元素,在fun中已经置0,所以fun1肯定得到return0。[顶]
2013年06月01日 15点06分 8
已经是逻辑算法层面的问题了,菜鸟初见有错望交流~[睡觉]
2013年06月01日 15点06分
回复 SpaceInvader0 :题目在楼下
2013年06月02日 03点06分
回复 cjx34567 :我刚定义i,就输出,总是出现-858993640
2013年06月02日 03点06分
回复 SpaceInvader0 :太感谢你了,写了这么多
2013年06月02日 03点06分
level 11
cjx34567 楼主

题目标题: 排它平方数
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求: 1. 6位正整数 2. 每个数位上的数字不同 3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
请通过浏览器提交答案。注意:只提交另一6位数,题中已经给出的这个不要提交。注意:不要书写其它的内容(比如:说明性的文字)。
2013年06月02日 03点06分 9
哈哈原来如此,找另外一个6位数怪不得for这样
2013年06月02日 03点06分
回复 SpaceInvader0 :这样看来你的代码只用单层的for和函数调用根本不太可能用冒泡法类似的思路实现。因为每次取到一个6位数就要不停的和他的平方的每个位上的数一一对比,有相同则返回0,无相同则打印。这才是正解,目测要用到for嵌套。
2013年06月02日 03点06分
level 6
一坨,看着就恶心,啊,程序猿何苦为难程序猿
2013年06月02日 03点06分 10
为难被人,他也不会啊
2013年06月02日 15点06分
level 4
格式太差
2013年06月05日 09点06分 12
1