当前位置: 代码迷 >> C语言 >> 这题算法的难度好高,希望有高手解答
  详细解决方案

这题算法的难度好高,希望有高手解答

热度:149   发布时间:2005-04-17 00:26:00.0
太恐怖了,这种程序调试时间为多少哦~
----------------解决方案--------------------------------------------------------
我不是高手
我的思想是这样的。你说他的3次方和4次方刚好有0~9组成。我就想到用数组和求余。一个数组用来对比。也就是我后面的b[10]。而a[10]就是存放我求余的数。当2个数组完全相等的时候就满足题目的条件了。我是用穷举法来算的。我写的不好。算法的时间复杂度大。可读性差。希望有高手帮我改的更好(衷心的希望)。但是我不想让那些灌水的人随便帮我改改。那样不如不改好(我要就不要做。要做就要做好。随便帮我谢谢有什么用呢。而且又不知道是不是正确的。我做的都上机验证的,力求准确。起码我不会误人。。。。。很多人在论坛上骂我狂傲。我的确是有点狂傲,这个我承认。但是灌水狂人那样随便说几句。或者乱写几句。对我来说不写和不说又有什么区别。我这个人就是我行我素。不怕人骂。我做的力求准确。朋友看我的帖子时候可以上机验证。而且每次的结果我都带抓图(这个可能这个论坛没几个人能做到吧,我既然做了版主就一定会尽我所能。帮助大家。要骂我的发e-mail来我邮箱ldm03@scse.com.cn)我用vc++.net写的。大家运行的时候也最好用vc++.net)(热情的贴子也是上机验证的。我这里吐血推荐各位朋友看看他的贴子。热情是我半个师傅呢) #include<stdio.h> #include<math.h> main() { int x,i,j,n,a[10],k,temp,b[10]; for(n=0;n<10;n++) b[n]=n; for(x=12;x<50;x++) { if(pow(x,3)>999 && pow(x,4)<999999) { k=(int)pow(x,3); //强行转换 j=(int)pow(x,4); n=0; while(k>0) { a[n]=k%10; //放入数组a[] k=k/10; n=n+1; } while(j>0) { a[n]=j%10; //继续放入,注意我的n变化 j=j/10; n=n+1; } if(n!=10) continue; //因为他说了刚好是0~9。所以数组要满足10个数 for(i=0;i<9;i++) //进行排序 { j=i; temp=a[i+1]; while(temp<a[j]&&j>-1) { a[j+1]=a[j]; j--; } a[j+1]=temp; } i=-1; //判断数组a[]里的数是不是0~9 n=0; while(i<=9) { i++; if(a[i]==b[i]) n++; } if(n==11) { printf("%d\n",x); break; } } } }
----------------解决方案--------------------------------------------------------
我不是高手~
----------------解决方案--------------------------------------------------------

晕,写错了一个函数,导致结果错误,改一下: #include<stdio.h>

void sort(int a[],int l) {int i,j,k,t; for(i=0;i<l-1;i++) {k=i; for(j=k+1;j<l;j++) if(a[k]>a[j]) k=j; if(k!=i) {t=a[i];a[i]=a[k];a[k]=t;} } } main() {int x,i,a[10],j; long m,n; x=10; while(1) { m=x*x*x; n=x*x*x*x; j=0; while(m) {a[j++]=m%10; m=m/10; } while(n) {a[j++]=n%10; n=n/10; } if(j>=10) {sort(a,10); for(i=0;i<10;i++) if(a[i]!=i) break; if(i>=10) break; } x++; } printf("The age =%d \n",x); getch(); }

这样比较好理解!

[此贴子已经被作者于2005-4-17 15:23:01编辑过]


----------------解决方案--------------------------------------------------------

楼中两位程序尚待改进

main() { long a,b,c; int T[10]={0},flag,i;

for(a=11;a<32;a++) /*a为年龄,由题可知10<a<32 */ { b=a*a*a; c=b*a; flag=1;

while(b) { T[b%10]=1; b/=10; } while(c) { T[c%10]=1; c/=10; } for(i=0;i<10;i++) { if(T[i]==0) { flag=0; } T[i]=0; } if(flag==1)printf("The age = %d \n",a); }

getch();

}


----------------解决方案--------------------------------------------------------
晕,空前大虾竟然在我发贴的同时删了自己的贴子
----------------解决方案--------------------------------------------------------
晕,怎么又有了?狂晕ing..................
----------------解决方案--------------------------------------------------------
只是编辑一下,写错了一个函数!
----------------解决方案--------------------------------------------------------
看错了,

[此贴子已经被作者于2005-4-17 20:37:23编辑过]



----------------解决方案--------------------------------------------------------
不知道22楼的大哥为什么发牢骚,呵呵,不过我觉得大家还是应该在写程序的时候先看看别人的程序......我的程序在18楼,我发贴之前是看过楼上所有帖子然后再给出的自己的思路的,因为从别人的程序中或多或少可以学到一些自己并不熟悉的东西,从而完善自己的思路。看了22楼的程序,我想厚着脸皮请22楼的高手大哥比较一下18楼和22楼两个程序,给出它们各自的优劣的一个评判(我想我写的再差也不会是一无是处的吧,呵呵),供大家把玩。小弟初来乍到,各位大虾多多关照,:)
----------------解决方案--------------------------------------------------------
  相关解决方案