69,382
社区成员
发帖
与我相关
我的任务
分享
其实我有一一种更加投机的想法:把这十个数相加,如果等于 1+2+。。。+9 ,则输出。这样子,岂不是更快?
代码如下:结果还是18~~
#include<stdio.h>
#include<math.h>
int main(void)
{
int age = 18;
int age3,age4,result=0,temp = 0;
int a[10],i,t,j;
int s[10]={0,1,2,3,4,5,6,7,8,9};
do{
age3 = pow(age,3);
for(i = 0 ; i <= 3 ; i++)
{
a[i] = age3 % 10;
age3 /= 10;
}
age4 = pow(age,4);
for(i = 4 ; i <= 9 ; i++)
{
a[i] = age4 % 10;
age4 /= 10;
}
for(int i=0; i <10 ; i++)
{
temp += i ;
result +=a[i];
}
if(temp == result)
{
printf("这位同学的年龄是%d\n",age);
break ;
}
age++;
}
while(age <= 21);
return 0 ;
}
for(i = 0 ; i <= 9 ; i++)
{
if (a[i] == s[i])
printf("这位同学的年龄是%d\n",age);
break;
}
建议:你可以设置a[0]-a[9]值为1,然后算的各位数字为索引i,设置a[i]=0,计算过程中遇到a[j]=0,说明此j数字已经出现,就不必往下继续计算,结束此次循环。否则,计算完毕必定是结果,因为此次循环共产生10个数字,此次循环能执行到底,说明每个数字出现且仅出现一次。跳出循环输出结果结论。此外,未能执行到底的循环,记得把a[0]-a[9]还原到初始1的状态。
这样就不必排序,也能缩短计算时间(因为不满足的,中间就会停止本次循环)而且答案是惟一的,找到即可//for循环判断a数组中是否含有0-9
for(i = 0 ; i <= 9 ; i++)
{
if (a[i] == s[i])//若相等则什么也不做
;
else //不等则跳出for循环
break;
}
//若i==10,则表明上面的for循环运行到最后都没有跳出,说明a数组中含有数字0-9,表明这个age是我们要找的,打印出来
if(i==10)
printf("这位同学的年龄是%d\n",age);
[/quote]
数组默认指向下一位么?定义时是a[10],i==10,就是这个数组指向了下一位了//for循环判断a数组中是否含有0-9
for(i = 0 ; i <= 9 ; i++)
{
if (a[i] == s[i])//若相等则什么也不做
;
else //不等则跳出for循环
break;
}
//若i==10,则表明上面的for循环运行到最后都没有跳出,说明a数组中含有数字0-9,表明这个age是我们要找的,打印出来
if(i==10)
printf("这位同学的年龄是%d\n",age);
#include<stdio.h>
#include<math.h>
int main(void)
{
int age = 18;
int age3,age4,result=0,temp = 0;
int a[10],i,t,j;
int s[10]={0,1,2,3,4,5,6,7,8,9};
do{
age3 = pow(age,3);
for(i = 0 ; i <= 3 ; i++)
{
a[i] = age3 % 10;
age3 /= 10;
}
age4 = pow(age,4);
for(i = 4 ; i <= 9 ; i++)
{
a[i] = age4 % 10;
age4 /= 10;
}
for(int i=0; i <10 ; i++)
{
temp += i ;
result +=a[i];
}
if(temp == result)
{
printf("这位同学的年龄是%d\n",age);
break ;
}
age++;
}
while(age <= 21);
return 0 ;
}
[/quote]
针对本题,你这种方案不可行
18:5832 104976 =45
19:6859 130321 = 38
20:8000 160000 = 32
21:9261 194481 = 45
如果问题拓展一下,也存在潜在的bug
1+...+9=45可以有很多种分解方案,不是嘛?比如1+2+(1+2)+4+...+9=2+2+2+4+...+9=45只要保证是10个数字就行
[/quote]】
其实还在于对待该问题的思路上,我只是突发奇想,想到的。其实,这题多变~谢谢你的批评哦[/quote]
恩,很好噻。有想法要多多交流。批评谈不上,属于讨论的结果!
#include<stdio.h>
#include<math.h>
int main(void)
{
int age = 18;
int age3,age4,result=0,temp = 0;
int a[10],i,t,j;
int s[10]={0,1,2,3,4,5,6,7,8,9};
do{
age3 = pow(age,3);
for(i = 0 ; i <= 3 ; i++)
{
a[i] = age3 % 10;
age3 /= 10;
}
age4 = pow(age,4);
for(i = 4 ; i <= 9 ; i++)
{
a[i] = age4 % 10;
age4 /= 10;
}
for(int i=0; i <10 ; i++)
{
temp += i ;
result +=a[i];
}
if(temp == result)
{
printf("这位同学的年龄是%d\n",age);
break ;
}
age++;
}
while(age <= 21);
return 0 ;
}
[/quote]
针对本题,你这种方案不可行
18:5832 104976 =45
19:6859 130321 = 38
20:8000 160000 = 32
21:9261 194481 = 45
如果问题拓展一下,也存在潜在的bug
1+...+9=45可以有很多种分解方案,不是嘛?比如1+2+(1+2)+4+...+9=2+2+2+4+...+9=45只要保证是10个数字就行
[/quote]】
其实还在于对待该问题的思路上,我只是突发奇想,想到的。其实,这题多变~谢谢你的批评哦
#include<stdio.h>
#include<math.h>
int main(void)
{
int age = 18;
int age3,age4,result=0,temp = 0;
int a[10],i,t,j;
int s[10]={0,1,2,3,4,5,6,7,8,9};
do{
age3 = pow(age,3);
for(i = 0 ; i <= 3 ; i++)
{
a[i] = age3 % 10;
age3 /= 10;
}
age4 = pow(age,4);
for(i = 4 ; i <= 9 ; i++)
{
a[i] = age4 % 10;
age4 /= 10;
}
for(int i=0; i <10 ; i++)
{
temp += i ;
result +=a[i];
}
if(temp == result)
{
printf("这位同学的年龄是%d\n",age);
break ;
}
age++;
}
while(age <= 21);
return 0 ;
}
[/quote]
针对本题,你这种方案不可行
18:5832 104976 =45
19:6859 130321 = 38
20:8000 160000 = 32
21:9261 194481 = 45
如果问题拓展一下,也存在潜在的bug
1+...+9=45可以有很多种分解方案,不是嘛?比如1+2+(1+2)+4+...+9=2+2+2+4+...+9=45只要保证是10个数字就行
#include<stdio.h>
#include<math.h>
int main(void)
{
int age = 18;
int age3,age4,result=0,temp = 0;
int a[10],i,t,j;
int s[10]={0,1,2,3,4,5,6,7,8,9};
do{
age3 = pow(age,3);
for(i = 0 ; i <= 3 ; i++)
{
a[i] = age3 % 10;
age3 /= 10;
}
age4 = pow(age,4);
for(i = 4 ; i <= 9 ; i++)
{
a[i] = age4 % 10;
age4 /= 10;
}
for(int i=0; i <10 ; i++)
{
temp += i ;
result +=a[i];
}
if(temp == result)
{
printf("这位同学的年龄是%d\n",age);
break ;
}
age++;
}
while(age <= 21);
return 0 ;
}
[/quote]
是满足0-9含有这10个数字,不是和相等。如果是两个2,那也等于1+3啊。条件不久不满足了么? for(i = 0 ; i <= 9 ; i++)
{
if (a[i] == s[i])
printf("这位同学的年龄是%d\n",age);
break;
}
改为: for(i = 0 ; i <= 9 ; i++)
{
if (a[i] == s[i])
;
else
break;
}
if(i==10)
printf("这位同学的年龄是%d\n",age);