求C语言高手帮忙,做一个程序,求出1~50000内的所有“黑洞数”。谢谢了!(内有关于黑洞数的东西)

作者&投稿:石琴 (若有异议请与网页底部的电邮联系)
关于黑洞数的编程(学不好C语言的娃儿,求教)~

上面的回答很正确,要改一下这儿:
if(a>b)swap(&a,&b);
if(a>c)swap(&a,&c);
if(b>c)swap(&b,&c);
此程序就是输入一个3位数,然后,把该三位数的3个数字变换顺序使变成最小的数和最大的数,输出两者之差,然后把这个差中的3位数调换顺序,使之变成最小的数和最大的数,再把两者的差值输出。比如说输入数为123,则第一个数为:321-123=198,第二个数为:981-189=792,第三个数为:972-279=693,第四个数为:963-369=594,以此类推,直到输出8个数为止。

那就说明循环的出口判断不正确啊,你手动算你的算法正确吗?最重要的错误是两个break不能连用啊,一个break都跳出了,怎么还会有第二个break的事????帮你改成了下,勉强可以用了,但是你应该再加上查重啊,否则输出太多重复的
#include #include #include int cha(int num) //将数按每位数字的大小重新排列出一个最大数和一个最小数,并求其差{ int a[5],i,j; for(i=0;ia[j]) { int t=a[i]; a[i]=a[j]; a[j]=t; } } int b[5]; for(i=0;i<5;i++) { b[i]=a[4-i]; } int suma=0,sumb=0; for(i=0;i<5;i++) { suma+=(int)pow(10,(double)(4-i))*a[i]; sumb+=(int)pow(10,(double)(4-i))*b[i]; } //printf("%d %d",suma,sumb); return sumb-suma;}void zhao(int snum) //查找出循环圈{ int i,j,k,c[10000],d[8000]; c[0]=snum; int tem = 0; bool find = false; for(i=1;i<10000;i++) { c[i]=cha(c[i-1]); //printf("%d
",cha(snum)); for(j=0;j<i;j++) { if(c[i]==c[j]) { for(k=j,tem=0;k<i;k++,tem++) { d[k-j]=c[k]; } find = true; } } if (find) break; } printf("["); for(i=0;i<tem-1;i++) printf("%d,",d[i]); printf("%d]
",d[tem-1]);}int main(){ int num; for(num=10000;num<100000;num++) { if(cha(num)==0) continue; zhao(num); } return 0;}

想了很久,在VC++6.0中调试了差不多半天,现在把求三位数和四位数中的黑洞数的程序写出来了(按定义可知一位和二位数中不存在黑洞数),现在贴出来供大家批评指正:(五位数中黑洞数的求解代码待续)

#include <iostream>
#include <stdio.h>
using namespace std;

int maxof3(int,int,int); //求三位数重排后的最大数
int minof3(int,int,int); //求三位数重排后的最小数
int maxof4(int,int,int,int); //求4位数重排后的最大数
int minof4(int,int,int,int); //求4位数重排后的最大数
void main()
{
int i;
for(i=100;i<=999;i++) //求三位数中的黑洞数
{
int hun,oct,data,max,min,j;
hun=i/100; oct=i%100/10; data=i%10;
max=maxof3(hun,oct,data);
min=minof3(hun,oct,data);
j=max-min;
hun=j/100; oct=j%100/10; data=j%10;
if(min==minof3(hun,oct,data))
cout<<i<<" is a blackhole number!"<<endl;
}
for(i=1000;i<=9999;i++) //求四位数中的黑洞数
{
int t,h,d,a,max,min,j;
t=i/1000; h=i%1000/100; d=i%100/10; a=i%10;
max=maxof4(t,h,d,a);
min=minof4(t,h,d,a);
j=max-min;
t=j/1000; h=j%1000/100; d=j%100/10; a=j%10;
if(min==minof4(t,h,d,a))
cout<<i<<" is a blackhole number !"<<endl;
}
}
int maxof3(int a,int b,int c)
{
int t;
t=a;
if(b>t)
{t=b;b=a;a=t;}
if(c>t)
{t=c;c=b;b=a;a=t;}
else
{if(c>b)
{t=c;c=b;b=t;}
}
return(a*100+b*10+c);
}

int minof3(int a,int b,int c)
{

int t;
t=a;
if(b>t)
{t=b;b=a;a=t;}
if(c>t)
{t=c;c=b;b=a;a=t;}
else
{if(c>b)
{t=c;c=b;b=t;}
}
return(c*100+b*10+a);
}

int maxof4(int a,int b,int c,int d)
{
if(a<b)
{a=a^b;b=a^b;a=a^b;}
if(c<d)
{c=c^d;d=c^d;c=c^d;}
if(a<c)
{a=a^c;c=a^c;a=a^c;}
if(b<d)
{b=b^d;d=b^d;b=b^d;}
if(b<c)
{b=b^c;c=b^c;b=b^c;}
return(a*1000+b*100+c*10+d);
}

int minof4(int a,int b,int c,int d)
{
if(a<b)
{a=a^b;b=a^b;a=a^b;}
if(c<d)
{c=c^d;d=c^d;c=c^d;}
if(a<c)
{a=a^c;c=a^c;a=a^c;}
if(b<d)
{b=b^d;d=b^d;b=b^d;}
if(b<c)
{b=b^c;c=b^c;b=b^c;}
return(d*1000+c*100+b*10+a);
}

另外谢了一个求解五位数中的黑洞数的程序,把部分代码复制到上面那个文件中就可以了:
#include <iostream>
using namespace std;

int maxof5(int,int,int,int,int);
int minof5(int,int,int,int,int);

void main()
{
int i;
for(i=10000;i<=50000;i++)
{
int dt,t,h,d,a,max,min,j;
dt=i/10000; t=i%10000/1000; h=i%1000/100; d=i%100/10; a=i%10;
max=maxof5(dt,t,h,d,a);
min=minof5(dt,t,h,d,a);
j=max-min;
dt=j/10000; t=j%10000/1000; h=j%1000/100; d=j%100/10; a=j%10;
if(min==minof5(dt,t,h,d,a))
cout<<i<<" is a blackhole number!"<<endl;
}
cout<<"maxof5(5,2,1,8,3) is : "<<maxof5(5,2,1,8,3)<<endl; //这行是测试用的
cout<<"minof5(5,2,1,8,3) is : "<<minof5(5,2,1,8,3)<<endl; //这行是测试用的,看看求解函
//数是否正确
}

int maxof5(int a,int b,int c,int d,int e)
{
int t;
if(a<b)
{a=a^b;b=a^b;a=a^b;}
if(c<d)
{c=c^d;d=c^d;c=c^d;}
if(a<c)
{a=a^c;c=a^c;a=a^c;}
if(b<d)
{b=b^d;d=b^d;b=b^d;}
if(b<c)
{b=b^c;c=b^c;b=b^c;}
if(e<=d)
{}
else
if(d<=e&&e<c)
{t=d;d=e;e=t;}

else
if(c<=e&&e<b)
{t=c;c=e;e=d;d=t;}
else
if(b<=e&&e<a)
{t=b;b=e;e=d;d=c;c=t;}
else
if(a<=e)
{t=a;a=e;e=d;d=c;c=b;b=t;}
else {cout<<"please check the program!"<<endl;}
return(a*10000+b*1000+c*100+d*10+e);
}

int minof5(int a,int b,int c,int d,int e)
{
int t;
if(a<b)
{a=a^b;b=a^b;a=a^b;}
if(c<d)
{c=c^d;d=c^d;c=c^d;}
if(a<c)
{a=a^c;c=a^c;a=a^c;}
if(b<d)
{b=b^d;d=b^d;b=b^d;}
if(b<c)
{b=b^c;c=b^c;b=b^c;}
if(e<=d)
{}
else
if(d<=e&&e<c)
{t=d;d=e;e=t;}

else
if(c<=e&&e<b)
{t=c;c=e;e=d;d=t;}
else
if(b<=e&&e<a)
{t=b;b=e;e=d;d=c;c=t;}
else
if(a<=e)
{t=a;a=e;e=d;d=c;c=b;b=t;}
else {cout<<"please check the program!"<<endl;}
return(e*10000+d*1000+c*100+b*10+a);
}

//结果只有两个:495和6174。
//如果放宽范围,则在10000000内还有两个:549945和631764。
//想要更大的,自己改循环次数慢慢等吧。
#include <iostream.h>
#include <math.h>
int isBlackHole(int a);
int sort(char *p,int len,int flag);
int main()
{
for(int i=1;i<50000;i++)if (isBlackHole(i))cout<<i<<endl;
return 0;
}
int isBlackHole(int a)
{
int save=a;
int len=int(log(a)/log(10)+1);
char *p =new char[len];
for(int i=0;i<len;i++){
p[i]=a%10;
a/=10;
}
int up=sort(p,len,1);
int dn=sort(p,len,0);
return save==(up-dn);
}
int sort(char *p,int len,int flag)
{
char temp;
int Rec=0;
for(int i=1;i<len;i++){
for(int j=0;j<len-1;j++){
if(flag==1){
if (p[j]>p[j+1]){
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
else{
if (p[j]<p[j+1]){
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
}
for(i=len-1;i>=0;i--)Rec=Rec*10+p[i];
return Rec;
}

酱油!想看看答案。。


求高手帮忙做一些C语言试题
2、逻辑关系“a≥10或a≤0”正确表示的C语言表达式是:a>=10 or a<=0 。错误 3、a=b=58是合法的C语言赋值表达式。正确 4、C语言表达式值的类型可以根据环境来确定。错误 5、若有int x=5;,则(float)x就把x转换为float类型了。错误 ...

帮忙用C语言做几个作业题,急!满意再加分。
(1)输入一个字符串,将其中所有大写字母改... 要用C语言编写,高手帮帮忙!!能写多少就帮忙写多少吧,急着交作业,自己完成不了那么多,见笑了。 1.编写下列程序,上机调试、验证。 (1) 输入一个字符串,将其中所有大写字母改为小写字母,而所有小写字母全部改为大写字母,然后输出。 设计步骤 ①用gets输入字符串; ...

C语言的多选问题,高手帮忙做下
1、下列常数中能作为C的常量的是:A、0x4 B、2.5e-2 C、33 D、03A 【选ABC,因为0开头的数字为八进制数,仅有0~7,木有A这个数】2、下列计算机语言中,CPU不能直接执行的是:A、自然语言 B、高级语言 C、汇编语言 D、机器语言 【选ABC,高级语言,编译器会转化为低级语言;自然语言CPU读...

各路C语言高手帮帮忙啊,做个判断题哈
第三题:错误 不会导致编译错误,因为x=5表示将5赋值给x,此条语句一直为真,故而编译不会报错 第四题: 错误 输出应该是TF 如果增加break语句才会输出一种情况,如下所示 int i=20;switch(i\/10){ case 2:printf("T");break;case 1:printf("F");break;} 第五题 正确 如 switch(i){...

紧急求高手帮忙做下C语言考试题
1:宏定义语句 #define f(x,y) fopen(x,y) 的引用 f("a.txt","rw"); 置换展开后为__fopen("a.txt","rw")_。2:在C语言中,表示逻辑“假”值用__!_表示。3:设i为int型变量,且初值是3,则表达式“i++-3”的值是_0__。4:设 int a=3,b=5,c=7;,则表达式a>c||c>b...

请高手用C语言帮忙做个编程的题目,谢谢了!
int IsDevided(int number,int dev){ if(number %dev == 0){ return 1;} return 0;} void EasyDone(int a){ int chose;int i,j;printf("Input your chose\\n1>能被3整除的"<Enter 1>","\\n2>能被5整除的<Enter 2>","\\n3>能被3或5整除的<Enter 3>\\n");scanf("%d",&chose)...

跪求C语言编程高手帮忙编个小程序,大一年级的
printf("字符串中共有:%d字符\\n大写字母:%d个\\n小写字母:%d个\\n数字:%d个\\n空格:%d个\\n其他字符:%d\\n",tot,a,b,c,d,e);for(i=0;i<tot-1;i++){ iPos = i;for(j=i+1;j<tot;j++)if(ch[j]<ch[iPos])iPos=j;iTemp = ch[i];ch[i] = ch[iPos];ch[iPos]=iTemp...

各位高手帮帮忙,帮我做个C语言编程
12366 99 15 include <stdio.h> int count();\/\/第二个问题 int fun3();\/\/第三个问题 int isSushu(int k);void main(){ int i,record;double s=0;for(i=1;;i++){ s+=1.0\/i;if(s>10)break;else record=i;} printf("%d\\n",record);printf("%d\\n",count());printf("%d...

哪位高手能帮忙做个C语言通讯录啊.(急)
scanf("%c%c",&n); if(n>='0'&&n<='8') { switch(n) { case '0':input(frind,N);break; case '1':display(frind);break; case '2':sort_name();break; case '3':del(frind,flag);break; case '4':insert(frind,N);break; case '5':count();break; case '6':search(frind...

求C语言高手 帮忙做个程序
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 情况,闰年且输入月份大于3时需考虑多加一天。2.程序源代码:main(){ int day,month,year,sum,leap;printf("\\nplease input year,month,day\\n");scanf("%d,%d,%d",&year,&month,&day);switch...

衡阳县15134436091: C语言高手请进,求一个程序 -
正霍八珍: #include <stdio.h> #include <string.h> #include <malloc.h> void sort(char **str,int n) {int i,j,k;char *temp;for(i=0;i<n;i++){for(j=i+1,k=i;j<n;j++) if(strcmp(str[j],str[k])<0)k=j;if(k!=i){temp=str[k];str[k]=str[i];str[i]=temp;}} } main() {int i;char *str[5...

衡阳县15134436091: 求高手帮我用C语言编写一道程序,给出整数a,b,求出区间[a,b]内的所有素数 -
正霍八珍: #includebool prime(int n) {int i;if(n==1)return 0;for(i=2;i*i<=n;i++){if(n%i==0)return 0;}return 1; }void main() {int i,n,a,b;scanf("%d",&n);while(n--){scanf("%d%d",&a,&b);for(i=a;i<=b;i++){if(prime(i))printf("%d ",i);}printf("\n");} }

衡阳县15134436091: 求大神帮忙用C语言编写一个简单的加法程序 -
正霍八珍: #include <stdio.h> void main() { int j; float number[100]; float sum=0; j=0; for(j=0;j <100;j++) { scanf( "%f ",&number[j]);if(number[j]!=0) printf( "+ "); if(number[j]==0) break; sum=sum+number[j]; } printf( "%f ",sum); }

衡阳县15134436091: 求高手帮忙写一段C语言程序
正霍八珍: int a[4][4]={{1,2,3,4},{12,13,14,5},{11,16,15,6},{10,9,8,7}}; for(int i=0;i<4;i++){ for(int j =0;j<4;j++){ printf("%d ",a[i][j]); } printf("\n"); }

衡阳县15134436091: 跪求c语言高手帮写程序
正霍八珍: #include<stdio.h> void main() { void v_func(); printf("please input the string you want\n"); v_func(); } void v_func() { char cstr; cstr=getchar(); if(cstr=='\n') { putchar(cstr); } else { v_func(); putchar(cstr); } } 一个简单的递归函数

衡阳县15134436091: C 语言高手 帮忙写个程序~~ -
正霍八珍: 事后发现有BUG,修改了第二次输入0时陷入死循的问题,重新对正了数字的排列 #...

衡阳县15134436091: 求高手写一个c语言的程序 -
正霍八珍: #include #define MAX_NUM_BIT 7 int main(void) { unsigned int iNum = 0; unsigned int n = 0; unsigned int iNumTmp = 0; int i=0; printf("请输入一个整数:"); scanf("%d", &iNum); if ( iNum > 9999999 || iNumMAX_NUM_BIT ) { return 0; } ...

衡阳县15134436091: 求大神编一个c语言程序 求出最高分和最低分的程序 -
正霍八珍: #include<iostream> void main() { double c[12] = {23,33,1,21,44,55,66,15,77,88,99,100}; double min = 0; double max = 0; //思路一:要求最高分和最低分,只需要将这些数字由小到大排好序,就求出来了. //思路二:将里面的数字逐一比较,把...

衡阳县15134436091: 高手帮忙做个C语言程序 -
正霍八珍: |#include<stdio.h>#include<math.h>void main(){ int n,n1,n2,n3; printf("请输入一个三位数:\n"); scanf("%d",&n); if(n<100||n>999) printf("不是"); else { n1=n%10; n2=(n/10)%10; n3=n/100; if(n==(pow(n1,3)+pow(n2,3)+pow(n3,3))) printf("是"); else printf("不是"); } }

衡阳县15134436091: 急求高手帮忙写个C 程序 -
正霍八珍: #include<stdio.h>#include<time.h>#include<stdlib.h>int main(){int rand,n,a,times=1;srand(time(NULL));printf("enter N:\n");scanf("%d",&n);rand=random()%n;printf("enter your anwser:");scanf("%d",&a);while(a!=rand){if(a>rand)printf("...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网