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,表示该数字已经出现一次。否则,若对应元素为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("%ld\t%d\n",x,y);
56                 }
57         }
58         else
59             continue;
60     }
61             printf("\n");
62             printf("%d\n",num);
63     return 0;
64 }

原文地址:https://www.cnblogs.com/javaexplorer/p/9965421.html

时间: 2024-11-05 22:47:48

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

程序设计入门——C语言 第1周编程练习 1逆序的三位数(5分)

第1周编程练习 查看帮助 返回 第1周编程练习题,直到课程结束之前随时可以来做.在自己的IDE或编辑器中完成作业后,将源代码的全部内容拷贝.粘贴到题目的代码区,就可以提交,然后可以查看在线编译和运行的结果.不要在程序中输出题目要求输出的内容以外的东西. 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 1 逆序的三位数(5分) 题目

0~9十个数,每个数只能使用一次,组成两个三位数相加和为四位数的算法

这几天上网,看到百度里面有人问这一道题目,0~9十个数,组成如下加法式 *** + *** = ****,每个数字都只能使用一次,问一共多少中组合? 今天,就用C#语言来写一下,解出这道题,其他语言算法相同,只是语法不同,这里由于时间关系,不再贴出代码. 这里先讲解一下思路,首先我们是程序员,不是数学家,我们是站在编程的角度思考问题.这里是两个三位数相加,得到一个四位数,所有数字不能重复,那么最小的三位数是123,最大的三位数是987,确定循环的范围,当然你非要用100到999也可以,不过就是效

给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123

题目描述 输入 一个不大于5位的数字 输出 三行 第一行 位数 第二行 用空格分开的每个数字,注意最后一个数字后没有空格 第三行 按逆序输出这个数 样例输入 12345 样例输出 5 1 2 3 4 5 54321程序:#include<stdio.h>#include<math.h>int main(){    int a,c,d,count=0,t;    scanf("%d",&a);    d=c=a;    while(c!=0)    {  

c语言中求解1的个数

在c语言中有三种求解一个数1的个数的方法 将整数每次右移一位的方式 int Numble(int n) { int count = 0; while (n) { if (n & 1 == 1) count++; n = n >> 1; } return count; } 但这种方法存在的不足是,当这个整数是负数的时候,将无限循环 使整数与1进行与运算,1每次左移一位 int Numble(int n) { int count = 0; int flag = 1; while (flag

C语言将十进制数转化为二进制(递归,规定位数)

/*运用递归算法*/ #include<stdio.h>void B(int n)   //定义函数{ if (n != 0) {  printf("%d",n%2);  B(n / 2); }}int main(){ int n; printf("Input number:"); scanf("%d",&n); printf("输出二进制:"); B(n);   //在B()函数里打印二进制数 retur

C语言之基本算法29—整数任意次方的最后三位数(精度问题)

//精度问题! /* ================================================================== 题目: 求整数的任意次方最后三位数!347的72次方最后三位数是241. ================================================================== */ #include<stdio.h> #include<iomanip> main() { int x,y,p,n;

「C语言」「算法」多种方法求一个数的位数及逆序数

1 #include <stdio.h> 2 3 4 int main() 5 { 6 int a,b[5]={0,0,0,0,0},i=0,len=0; 7 scanf("%d",&a); 8 while(i<5) 9 { 10 b[i]=a%10; 11 a=a/10; 12 len++; 13 if(a==0) 14 break; 15 i++; 16 } 17 printf("%d\n",len); 18 for(i=len-1;i

怎样计算一个整数的位数&amp;并把每一位上的数字保存下来

用循环来解决~~ M每次除以10, 再用一个变量count来计数,每循环一次 加1,直到这个数除去10后的数小于10 ,count再加1就可以了 实例:整数M=4325, 第一次:4325/10=432,M结果不为0,cout=1; 第一次:432/10=43,M结果不为0,cout=2; 第三次:43/10=4,M结果不为0,count=3; 第四次:M为4,结果不为0,count=4;但是M/10为0,循环结束了 至于保存一个整数的每一位数,我们可以用最常规的方法,用取模(%)和相除(/)连

输入一个100以内的整数,判断是一位数的数、两位数的数、还是100

Console.Write("请输入100以内整数:"); int shu = int.Parse(Console.ReadLine()); if (shu >= 0 && shu < 10) Console.WriteLine("这个数是一位数"); else if (shu >= 10 && shu < 100) Console.WriteLine("这个数是个两位数"); else i