❶ c語言,任何一個數字不全相同的三位數,經有限次「重排求差」操作,總得到495。所得的495即為三位黑洞數
/*重寫了一個,因為用你的變數定義排序很麻煩,而且你的變數使用有點兒亂*/
#include<stdio.h>
//#include"stdlib.h"
intmain(void)
{
intd[4],n;
inti,j,t,max,min,k,num;
printf("Inputaninteger:");
scanf("%d",&n);
num=0;
do
{
d[2]=n%10;
d[1]=(n/10)%10;
d[0]=(n/100);
if(d[0]==d[1]&&d[1]==d[2])
{
printf("InputERROR!");
return0;
}
//按位降序,並求出最大數和最小數
max=0;
min=0;
k=1;
for(i=0;i<=2;i++)
{
for(j=2;j>i;j--)
{
if(d[j]>d[j-1])
{
t=d[j];d[j]=d[j-1];d[j-1]=t;
}
}
max=max*10+d[i];
min=min+d[i]*k;
k=k*10;
}
n=max-min;
printf("%d-%d=%d ",max,min,n);
//system("pause");
num+=1;
}while(n!=495);
printf("number:%d",num);
return0;
}
❷ C語言初學者 幫忙找錯
我直接在你的程序里做注釋和修改吧
#include <stdio.h>
#include <conio.h>
void main()
{
int i,a,b,c,p,q,n;
int max (int x1,int y1,int z1);
int middle (int x2,int y2,int z2);
int min (int x3,int y3,int z3);
printf("Please input i:");
scanf("%d",i);
a=i/100;b=i%100/10;c=i%10;
p=100*max(a,b,c)+10*middle(a,b,c)+min(a,b,c);
q=100*min(a,b,c)+10*middle(a,b,c)+max(a,b,c);
while (n!=495) {n=p-q;printf("%d ",n);} //這里有三個錯誤,第一是,n沒有付值,第二是,當n!=495時,輸入了n。這樣,就不能夠輸入495了。第三是,循環體裡面沒辦法求出你需要的東西。
//下面是我的我用{//}分鉛明兆開
{/
for(n=p-q;n!=495;n=p-q)
{
printf(」%d」,&n);
a=i/100;b=i%100/10;c=i%10;
p=100*max(a,b,c)+10*middle(a,b,c)+min(a,b,c);
q=100*min(a,b,c)+10*middle(a,b,c)+max(a,b,c);
}
printf(」%d」,&n);
/}
getch();
}
int max (int x1,int y1,int z1)
{
int e;
if (x1>y1) e=x1;else e=y1;
if (e<z1) {e=z1;return(e);}
else return(e);
}
int min (int x2,int y2,int z2)
{
int e;
if (x2<y2) e=x2;else e=y2;
if (e>z2) {e=z2;return(e);}
else return(e);
}
int middle (int x3,int y3,int z3)
{
int e;
if ((x3-y3)<0 && (x3-z3)>0) {e=x3;return(e);}
if ((y3-x3)<0 && (y3-z3)>0) {e=x3;return(e);}
if ((z3-x3)<0 && (z3-y3)>0) {e=x3;return(e);}
}//這里也有點錯誤,有沒有留意,每次你都是返回了x3;
應該相對槐陪應改槐租為,y3,z3;
上面的代碼請不要直接復制到c語言編輯器裡面,因為字體問題,可能導致編譯出錯。麻煩一個一個打進去。謝謝
❸ C語言出錯驗證3位黑洞數
#include<stdio.h>
int sub(int i)
{
int p,k,j,h,max,min,a[4];
a[1]=i/100;
a[2]=(i/10)%10;a[3]=i%10;
for(k=1;k<=2;k++)
for(j=k+1;j<=3;j++)
if(a[k]<a[j])
{ h=a[k];a[k]=a[j];a[j]=h; }
max=a[1]*100+a[2]*10+a[3];
min=a[3]*100+a[2]*10+a[1];
p=max-min;
if(p<100 && p/10==p%10) p=0;
return (p);
}
int main()
{
int n,n1,y,i,m;
printf(" 驗證任意3位數'重排求差'操作,可於495或0.");
for(y=0,n=101;n<=999;n++)//修改n的取值范圍,可求出最多的轉換次數
{
i=n;m=0;
while(i!=495 && i!=0)
{ i=sub(i);m++; }
if(m>y) { y=m;n1=n; }
}
printf(" 當n=%d時,最多轉換%d次可至495或0:",n1,y);
printf(" %d",n1);
i=n1;
while(i!=495 && i!=0)
{ i=sub(i);printf("->%d",i); }
return 0;
}
❹ 求C語言高手幫忙,做一個程序,求出1~50000內的所有「黑洞數」。謝謝了!(內有關於黑洞數的東西)
想了很久,在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);
}
❺ c語言:找出六位數內的黑洞數。幫看錯在哪裡啊啊啊,能運行,但沒結果。大神!!!!在哪
b和a的定義int不太妥當,因為inta=b/10000,就是0了,a必須定義為其他數據類型,就好像int1/3=0.
❻ C語言5位黑洞數
那就說明循環的出口判斷不正確啊,你手動算你的演算法正確嗎?最重要的錯誤是兩個break不能連用啊,一個break都跳出了,怎麼還會有第二個break的事????幫你改成了下,勉強可以用了,但是你應該再加上查重啊,否則輸出太多重復的
#include<stdio.h>
#include<stdio.h>
#include<math.h>
intcha(intnum)//將數按每位數字的大小重新排列出一個最大數和一個最小數,並求其差
{
inta[5],i,j;
for(i=0;i<5;i++)
{
a[i]=num%10;
num/=10;
}
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
{
if(a[i]>a[j])
{
intt=a[i];
a[i]=a[j];
a[j]=t;
}
}
intb[5];
for(i=0;i<5;i++)
{
b[i]=a[4-i];
}
intsuma=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);
returnsumb-suma;
}
voidzhao(intsnum)//查找出循環圈
{
inti,j,k,c[10000],d[8000];
c[0]=snum;
inttem=0;
boolfind=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]);
}
intmain()
{
intnum;
for(num=10000;num<100000;num++)
{
if(cha(num)==0)
continue;
zhao(num);
}
return0;
}
❼ c語言 黑洞數
#include<stdio.h>
intmain(void)
{
intnumber,x,y,a,b,c,t,i,max,min,mid;
scanf("%d",&number);i=1;
while(number!=495){
a=number/100;
b=number%100/10;
c=number%10;
mid=a+b+c;
max=a>b?a:b;max=max>c?max:c;
min=a>b?b:a;min=min>c?c:min;
mid=mid-min-max;
x=max*100+mid*10+min;
y=min*100+mid*10+max;
/*---------*/
number=x-y;
printf("%d:%d-%d=%d ",i,x,y,number);
i++;
}
return0;
}