12个回答
展开全部
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#include<time.h>
#include<windows.h>
int main(void)
{
double n,k,t1,t2,t3,ge,shi,bai,qian,wan,shiwan,baiwan,qianwan,yi,shiyi;
int i,m,a;FILE *p;p=fopen("123.txt","a");t1=t2=t3=0; int y,b,c,j;
clock_t start,finish,zhishi,zhizhong,kkk,mmm;
k=t1=t2=ge=shi=bai=qian=wan=0;a=i=0;n=3;
m=9;
printf("水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。\n");
printf("例如:153=1^3+5^3+3^3。而本程序将探索9位以内的水仙花数\n");
printf("本次运算将会保存结果为123.txt到本程序根目录下\n");
system("pause");
kkk=clock();
onceagain:
i=10;a++;
printf("第%d回合开始:\n",a);
printf("本次计算%.0lf位的水仙花数\n",n);
fprintf(p,"\n%.0lf位水仙花数:",n);
zhishi=clock();
for(;;)
{
i++;
if(i==11){start=clock();}
if(n==3&&i==11) {i=100;}
if(n==4&&i==11) {i=1000;}
if(n==5&&i==11) {i=10000;}
if(n==6&&i==11) {i=100000;}
if(n==7&&i==11) {i=1000000;}
if(n==8&&i==11) {i=10000000;}
if(n==9&&i==11) {i=100000000;}
y=i;k=0;
do {
c=y%10;
y=y/10;
j=1;
b=c;
while(j<n)
{
b=b*c;
j++;
}
k=k+b;
}while(y>0);
/*ge= i/ 1% 10;
shi= i/ 10% 10;
bai= i/ 100% 10;
qian= i/ 1000% 10;
wan= i/ 10000% 10;
shiwan= i/ 100000% 10;
baiwan= i/ 1000000% 10;
qianwan=i/ 10000000% 10;
yi= i/ 100000000% 10;
shiyi= i/1000000000% 10;*/
/*k=pow(ge,n)+pow(shi,n)+pow(bai,n)+pow(qian,n)+pow(wan,n);
k=pow(shiwan,n)+pow(baiwan,n)+pow(qianwan,n)+pow(yi,n)+pow(shiyi,n)+k;*/
/*如上被注释成伪代码的部分是第一代代码,效率低*/
if(k==i){finish=clock();t1=(double)(finish-start)/CLOCKS_PER_SEC;start=clock();}
if(k==i){printf("%.0lf 算出该答案耗时:%.3lf秒\n",k,t1);}
if(k==i){fprintf(p,"\n%.0lf 算出该答案耗时:%.3lf秒",k,t1);}
if(n==3 &&i>999){break;}
if(n==4 &&i>9999){break;}
if(n==5 &&i>99999){break;}
if(n==6 &&i>999999){break;}
if(n==7 &&i>9999999){break;}
if(n==8 &&i>99999999){break;}
if(n==9 &&i>999999999){break;}
}
zhizhong=clock();t2=(double)(zhizhong-zhishi)/CLOCKS_PER_SEC;
printf("第%d回合结束,本次运行共耗时%.3lf秒\n\n",a,t2);
fprintf(p,"\n本次运行共耗时%.3lf秒\n",t2);
if(n<m){n++;goto onceagain;}
else
{mmm=clock();t3=(double)(mmm-kkk)/CLOCKS_PER_SEC;printf("本次程序完成所有任务共耗时%.3lf秒\n",t3);fprintf(p,"\n本次运行共耗时%.3lf秒\n",t3);
system("pause");
return 0;}
}
简单粗暴的穷举法。你可以自己简单修改一下应付作业。拒绝任何形式的转载!谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
void main()
{
int i, m,a,b,c;
for(m=100;m<1000;m++)
{
a=m/100;
b=(m-a*100)/10;
c=m-a*100-b*10;
i=a*a*a+b*b*b+c*c*c;
if(m==i)
printf("%d ",m);
continue;
}
}
/*153 370 371 407*/
void main()
{
int i, m,a,b,c;
for(m=100;m<1000;m++)
{
a=m/100;
b=(m-a*100)/10;
c=m-a*100-b*10;
i=a*a*a+b*b*b+c*c*c;
if(m==i)
printf("%d ",m);
continue;
}
}
/*153 370 371 407*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询