當前位置:首頁 » 編程語言 » 用c語言做黑洞陷阱
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

用c語言做黑洞陷阱

發布時間: 2022-08-03 12:36:53

c語言黑洞問題

#include <stdio.h>
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}

int main(void)
{
int a,b,c,y;
scanf(%d %d %d",&a,&b,&c);
y=max(a,b);
y=max(y,c);
printf("max=%d\n",y);
return 0;

Ⅱ 用c++編程求黑洞運算

黑洞運算
任取一個數,例如35962,數出這數中的偶數個數、奇數個數及所有數字的個數,就可得到2(2個偶數)、3(3個奇數)、5(總共五位數),用這3個數組成下一個數字串235。對235重復上述程序,就會得到1、2、3,將數串123再重復進行,仍得123。對這個程序和數的「宇宙」來說,123就是一個數字黑洞。

Ⅲ C語言 數學黑洞 哪裡有錯

#include<stdio.h>
#include<string.h>

#define ODDNUM "13579"
#define NUM "1234567890"

int main(int argc, char *argv[])
{
char input[512], c, str[512];
int oddCnt=0, evenCnt=0;
char *p;

memset(input, 0x00, 512);

printf("Input a number: ");
scanf("%s", input);
printf("%s\n", input);

p=input;
while((c=*p++))
{
if(!index(NUM, c))
{
printf("ERROR: you should input a number.\n");
return -1;
}
}

while(strcmp(str, input))
{
oddCnt=0; evenCnt=0;
memcpy(str, input, sizeof(input));

p=str;
while((c=*p++))
{
if(index(ODDNUM, c))
oddCnt++;
else
evenCnt++;
}
sprintf(input, "%d%d%d", evenCnt, oddCnt, evenCnt+oddCnt);
printf("%s\n", input);
}

return 0;
}

Ⅳ 用C語言做:數學黑洞6174 格式要找樣例一樣的哦!謝謝您!

#include <stdio.h>
#defineDST_NUM6174
void ReSort(char c[], int len);
int MaxNum(char c[], int len);
int MinNum(char c[], int len);
void GetChars(unsigned int num, char c[], int len);
int count = 0;
int func(unsigned int num)
{
int res;
char c[4];
GetChars(num, c, 4);
ReSort(c, 4);
res = MaxNum(c, 4) - MinNum(c, 4);
count++;
if(res == DST_NUM) return count;
return func(res);
}
void main()
{
unsigned int num;
while(scanf("%d", &num))
{
getchar();
printf("%d\n", func(num));
count = 0;
}
}
void GetChars(unsigned int num, char c[], int len)
{
for(int i = 0; i < len; i++)
{
c[i] = num % 10 + '0';
num = num / 10;
}
}
void ReSort(char c[], int len)
{
int i, j;
char tmp;
for(i = len - 1; i > 0; i--)
{
for(j = 0; j < i; j++)
{
if(c[j] > c[j+1])
{
tmp = c[j];
c[j] = c[j+1];
c[j+1] = tmp;
}
}
}
}
int MaxNum(char c[], int len)
{
unsigned int num = 0;
for(int i = len - 1; i >= 0; i--)
{
num *= 10;
num += (c[i] - '0');
}
return num;
}
int MinNum(char c[], int len)
{
unsigned int num = 0;
for(int i = 0; i < len; i++)
{
num *= 10;
num += (c[i] - '0');
}
return num;
}

Ⅳ 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;

}

Ⅵ C語言中的一道題數字黑洞:

沒有去考慮你的邏輯,但至少有一處你錯了,
main函數中,數組a沒有指定大小,不能a[n]企圖通過輸入的n隨時改變數組的大小。必須在運行前就指定。

Ⅶ 求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語言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語言或C++的 數學黑洞問題,我好像陷入了死循環。求幫忙

當J=0時,第二個for語句中的i<4-j也就是i<4,i++,這樣的話i最大可以達到3
而在下面的語句中有個S[i+1]也就是S[4],這意味著數組的長度是5個,而你只定義了4的長度
數組長度溢出了
而且那個前後調換的函數貌似也有問題
應該是s[i]=s[i+1]而不是s[j]=s[i+1]
i 和 j 打錯了是不是