c/c++语言开发共享c语言实现求解这样的6位数:SQRT(6位数)=3位数,9个数字互不相同(SQRT表示开平方)

(1)设置10个元素的状态数组p,记录数字0~9在6位数和3位数中出现的情况。数组元素都赋值1,表示数字0~9没有被使用过。 (2)对尝试的每一个数3位数x,6位数=x*x,并取其各个位数字,数字作为数组的下标,若对应元素为1,则该数字第一次出现, 将对应的元素赋值为0,表示该数字已经出现一次。否则 …

(1)设置10个元素的状态数组p,记录数字0~9在6位数和3位数中出现的情况。数组元素都赋值1,表示数字0~9没有被使用过。

(2)对尝试的每一个数3位数x,6位数=x*x,并取其各个位数字,数字作为数组的下标,若对应元素为1,则该数字第一次出现,

将对应的元素赋值为0,表示该数字已经出现一次。否则,若对应元素为0,则说明有重复数字,结束这次尝试。

(3)当状态数组p中9个元素为0时,就找到了问题的解。但这样判定有解,需要扫描一遍数组p。为避免这个步骤,

设置一个计数器k,在取x,x*x各个位数的过程中记录不同数字的个数,当k=9时就找到了问题的解。

 1 #include<stdio.h>  2 int main()  3 {  4     long x;  5     int p[10];  6     int i,t,k;  7     int num=0;  8     int n,f,y,m;  9     for(x=100;x<=999;x++) 10     { 11         for(i=0;i<=9;i++) 12             p[i]=1; 13             y=x*x; //y表示6位数 14             f=y;   //将y暂时存放在f中 15             n=x;   //n表示3位数 16         if(f<=999999) 17         { 18             k=0; 19         for(i=1;i<=6;i++) 20         { 21             t=n%10; 22             n=n/10; 23             m=f%10; 24             f=f/10; 25             if(m==t) 26             { 27             k=0; 28             break; 29             } 30             if(i<4) 31                if(p[t]==1) 32                { 33                 p[t]=0; 34                 k++; 35                } 36              else 37               { 38                k=0; 39                break; 40               } 41               if(p[m]==1) 42               { 43                p[m]=0; 44                k++; 45               } 46               else 47               {       48                k=0; 49                break; 50               } 51         } 52             if(k==9) 53                 { 54                  num=num+1; 55                  printf("%ldt%dn",x,y); 56                 } 57         } 58         else 59             continue; 60     } 61             printf("n"); 62             printf("%dn",num); 63     return 0; 64 }

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/606274.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐