鱼C论坛

 找回密码
 立即注册
查看: 1828|回复: 2

[已解决]萌新运行不出结果哇,有带佬看看哪不对咩

[复制链接]
发表于 2021-7-6 11:36:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935-1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我的年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你推算一下,他当时到底有多年轻。


  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int a,b,i;
  5.         a=i*i*i;
  6.         b=i*i*i*i;
  7.         for(i=1;i<=100;i++)
  8.         {
  9.                 if(a/1000>=1&&a/1000<=9)//判断i三次方是否是四位数
  10.                         if(b/100000>=1&&b/100000<=9)//判断i四次方是否是六位数
  11.                                 if(yes(a,b)==1)//判断a,b中所有数是否符合刚好包含0——9 , 若返回值为1,则符合
  12.                                         printf("%d",i);//将符合的i的值输出,i即为年龄
  13.                                        
  14.                                
  15.         }
  16.         return 0;
  17. }

  18. int yes(int a,int b)
  19. {
  20.         int i,j,k,t;
  21.         int p[10];
  22.         int q[10]={9,8,7,6,5,4,3,2,1,0};
  23.         p[0]=a/1000;
  24.         p[1]=(a-1000*p[0])/100;
  25.         p[2]=(a-1000*p[0]-100*p[1])/10;
  26.         p[3]=a-1000*p[0]-100*p[1]-10*p[2];//把a中的各位赋给p[0]--p[3]
  27.         p[4]=b/100000;
  28.         p[5]=(b-100000*p[4])/10000;
  29.         p[6]=(b-100000*p[4]-10000*p[5])/1000;
  30.         p[7]=(b-100000*p[4]-10000*p[5]-1000*p[6])/100;
  31.         p[8]=(b-100000*p[4]-10000*p[5]-1000*p[6]-100*p[7])/10;
  32.         p[9]=b-100000*p[4]-10000*p[5]-1000*p[6]-100*p[7]-10*p[8];
  33.         //把b中的各位赋给p[4]---p[9]
  34.     for(i=0; i<9; i++){
  35.    
  36.         for(j=0; j<9-i; j++)   
  37.                 {
  38.             if(p[j]<p[j+1]){
  39.                 t = p[j];
  40.                 p[j] = p[j+1];
  41.                 p[j+1] = t;
  42.             }
  43.         }
  44.     }//将p[10]内的元素从大到小排序
  45.         for(i=0,j=1;i<10;i++)
  46.                 {
  47.                         if(p[i]===q[i]&&j==1)
  48.                         j=1;
  49.                         else
  50.                         j=0;
  51.                
  52.                
  53.                 }//判断p[10]与q[10]是否相等
  54.                 if (j=1)
  55.                 return 1;
  56.                 else
  57.                 return 0;
  58. }
复制代码


最后没有输出任何结果


最佳答案
2021-7-6 13:27:50
c 写这些东东  太麻烦了    python 也就是10几行代码的事情

  1. #include <stdio.h>
  2. void sort(int *arr, int sz)
  3. {
  4.         for (int j = sz - 1; j >= 0; j--)
  5.         {
  6.                 for (int i = 0; i+1 <= j; i++)
  7.                 {
  8.                         if (arr[i] > arr[i + 1])
  9.                         {
  10.                                 int tmp = arr[i];
  11.                                 arr[i] = arr[i + 1];
  12.                                 arr[i + 1] = tmp;
  13.                         }
  14.                 }
  15.         }
  16. }

  17. int isarr(int* a,int alen,int * b,int blen){
  18.     if (alen!=blen){
  19.         return 0;
  20.     }
  21.     else{
  22.         for (int i=0;i<alen;i++){
  23.             if (a[i]!=b[i])
  24.             {
  25.                 return 0;
  26.             }
  27.         }
  28.     }
  29.     return 1;
  30. }
  31. void chaifen(int num,int *buf){
  32.         int cnt=0;
  33.         do{
  34.                 buf[cnt++]=num%10;
  35.                 num/=10;
  36.         }while(0!=num);
  37. }
  38. void addarr(int* s,int slen,int *d,int dlen){
  39.     for (int i=0;i<dlen;i++){
  40.         s[slen+i]=d[i];
  41.     }
  42. }
  43. int main()
  44. {
  45.       int a[]={0,1,2,3,4,5,6,7,8,9};
  46.       int buf[10]={0};
  47.       int buf2[10]={0};
  48.       int y=1;
  49.       while(1)
  50.       {
  51.           if (y*y*y>9999 || y*y*y*y>999999){
  52.               break;
  53.           }
  54.           if(y*y*y<1000 || y*y*y*y<100000)
  55.           {
  56.               y++;
  57.               continue;
  58.           }
  59.           chaifen(y*y*y,buf);
  60.           chaifen(y*y*y*y,buf2);
  61.           addarr(buf,4,buf2,6);
  62.           sort(buf,10);
  63.           if(isarr(buf,10,a,10)){
  64.               printf("year:%d\n",y);
  65.               break;
  66.           }
  67.           y++;
  68.       }
  69.       return 0;
  70. }

复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-6 13:27:50 | 显示全部楼层    本楼为最佳答案   
c 写这些东东  太麻烦了    python 也就是10几行代码的事情

  1. #include <stdio.h>
  2. void sort(int *arr, int sz)
  3. {
  4.         for (int j = sz - 1; j >= 0; j--)
  5.         {
  6.                 for (int i = 0; i+1 <= j; i++)
  7.                 {
  8.                         if (arr[i] > arr[i + 1])
  9.                         {
  10.                                 int tmp = arr[i];
  11.                                 arr[i] = arr[i + 1];
  12.                                 arr[i + 1] = tmp;
  13.                         }
  14.                 }
  15.         }
  16. }

  17. int isarr(int* a,int alen,int * b,int blen){
  18.     if (alen!=blen){
  19.         return 0;
  20.     }
  21.     else{
  22.         for (int i=0;i<alen;i++){
  23.             if (a[i]!=b[i])
  24.             {
  25.                 return 0;
  26.             }
  27.         }
  28.     }
  29.     return 1;
  30. }
  31. void chaifen(int num,int *buf){
  32.         int cnt=0;
  33.         do{
  34.                 buf[cnt++]=num%10;
  35.                 num/=10;
  36.         }while(0!=num);
  37. }
  38. void addarr(int* s,int slen,int *d,int dlen){
  39.     for (int i=0;i<dlen;i++){
  40.         s[slen+i]=d[i];
  41.     }
  42. }
  43. int main()
  44. {
  45.       int a[]={0,1,2,3,4,5,6,7,8,9};
  46.       int buf[10]={0};
  47.       int buf2[10]={0};
  48.       int y=1;
  49.       while(1)
  50.       {
  51.           if (y*y*y>9999 || y*y*y*y>999999){
  52.               break;
  53.           }
  54.           if(y*y*y<1000 || y*y*y*y<100000)
  55.           {
  56.               y++;
  57.               continue;
  58.           }
  59.           chaifen(y*y*y,buf);
  60.           chaifen(y*y*y*y,buf2);
  61.           addarr(buf,4,buf2,6);
  62.           sort(buf,10);
  63.           if(isarr(buf,10,a,10)){
  64.               printf("year:%d\n",y);
  65.               break;
  66.           }
  67.           y++;
  68.       }
  69.       return 0;
  70. }

复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-7-6 15:17:48 | 显示全部楼层
wp231957 发表于 2021-7-6 13:27
c 写这些东东  太麻烦了    python 也就是10几行代码的事情

非常感谢,我照着您的思路又写了一遍,成功了。
只不过我依然没找出来我原本思路的错误,但还是非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 15:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表