1樓:
這是個遞迴的演算法雖然複雜度比較高,但能解決問題。
如果要寫成遞推的話可能比較麻煩,既然問題規模不大就不去耗費精力了。
#include
void getnumber(int n, int num, int mod_3_0,int mod_3_1, int mod_3_2,int value, int *output)
if (num !=0)
output[n] =num;
value -=num;
int i;
if (n < 5)
for (i = num + 1; i <=10; i++)
if (i % 3 ==0 &&mod_3_0 > 0)
getnumber(n + 1, i, mod_3_0 - 1, mod_3_1, mod_3_2, value, output);
else if (i % 3 ==1 &&mod_3_1 > 0)
getnumber(n + 1, i, mod_3_0, mod_3_1 - 1, mod_3_2, value, output);
else if (i % 3 ==2 &&mod_3_2 > 0)
getnumber(n + 1, i, mod_3_0, mod_3_1, mod_3_2 - 1, value, output);
if (n ==5 &&value >=0 &&value <=4)
for (i = 0; i < 5; i++)printf("%d-",output[i]);
printf("%d", output[5]);
return ;
if (num !=0) value +=num;
int main()
int output[6];
getnumber(-1, 0, 2, 2, 2, 26, output);
return 0;
2樓:網友
你看下面的**是不是解決了你的問題:
note:your choice is c ide */#include ""
void main()
int i,j,k,l,n,m;
int yu0=0,yu1=0,yu2=0;
for(i=1;i<=5;i++)
for(j=i+1;j<=6;j++)
for(k=j+1;k<=7;k++)
for(l=k+1;l<=8;l++)
for(n=l+1;n<=9;n++)
for(m=n+1;m<=10;m++)
if(m%3==0)
yu0++;
if(m%3==1)
yu1++;
if(m%3==2)
yu2++;
if(i%3==0)
yu0++;
if(i%3==1)
yu1++;
if(i%3==2)
yu2++;
if(j%3==0)
yu0++;
if(j%3==1)
yu1++;
if(j%3==2)
yu2++;
if(k%3==0)
yu0++;
if(k%3==1)
yu1++;
if(k%3==2)
yu2++;
if(l%3==0)
yu0++;
if(l%3==1)
yu1++;
if(l%3==2)
yu2++;
if(n%3==0)
yu0++;
if(n%3==1)
yu1++;
if(n%3==2)
yu2++;
21&&i+j+k+l+n+m<27)
printf("%d-%d-%d-%d-%d-%d",i,j,k,l,n,m);
yu0=0;yu1=0;yu2=0;
c語言中如何判斷輸入的是否數字?
3樓:開沙肇皛
這個程式不難寫,我告訴你思路和演算法,你根據這個編寫**就可以了。
1.由於你輸入的這一串資料可能都為數字,也可能包含其它字元,所以首先用一字元陣列存放這個字串。
2.用strlen函式計算這個字串的長度,在此基礎上藉助for迴圈或while迴圈實現陣列元素的遍歷。
3.遍歷每乙個元素的同時用if語句判斷這個元素的ascii碼所在的範圍是否在48~57之間,如果不在則中止迴圈,輸出判斷結果(即不是數字)。
4.如果最後乙個元素仍然是數字,則整個字串則為乙個大數。
4樓:逮長逸穆驪
你寫的這個有太多的錯誤。至於定義陣列的時候a[n]這種錯誤我就不講了。
還有在迴圈裡面(i=1;in沒賦值就呼叫的錯誤我也不講了。
講你的死迴圈問題。
你沒有給迴圈加乙個限制條件。
根據你continue的意思我暫時理解為。
如果輸入的不是數字。
那麼一直迴圈。
重新輸入。一直到你輸入的是數字為止跳出迴圈。
對嗎?while(1)
break;
這樣就可以。
如果輸入的是數字。
scanf的返回值為1
那麼迴圈的第一次。
不會進入if(ret==0)
也就是說。如果輸入的是數字。
直接執行break跳出迴圈。
如果輸入的不是數字。
迴圈的時候執行語句if(ret==0)
然後執行continue
continue的意思是跳出當前迴圈繼續下一次迴圈。
即執行到continue之後從新迴圈而不會執行到break以此類推。只要你輸入的不是數字。
則永遠迴圈。
輸入的如果是數字。
跳出迴圈。執行完畢。
大哥。如果小弟正常。
給點分吧。多謝。
另外對於一樓的同學。
我想你肯定不知道。
scanf("%d",&i)
如果你輸入的是int型則返回1
否則返回0換句話說即你輸入的型別和scanf()裡面預先定義的型別一致。
則返回1否則返回0
thankyou
5樓:忻璧計清馨
#include
voidmain()
printf("請輸入1~3000年的任意一年:")
c語言中數字問題
6樓:仝涵易
題目已經假定乙個整數佔4個位元組了,當然選d啊。
7樓:網友
選 d ;
型別*陣列長度。
比如:int a[10] sizeof(a)=4*10
8樓:網友
整形陣列求大小:sizeof(陣列名)。
sizeof(a) 為 20
c語言函式問題第10題,C語言問題求解第10題
sub1函式內會交換形參a b的值,但由於a b是形參且並非傳地址,故fun函式執行完後,對實參不會有影響。sub1 a,b 執行完後,a b仍然會維持原來的值不變,即a的值仍然是 a b的值仍然是 b putchar a putchar b 為輸出字元型變數a b的值,即輸出 ab 綜上所述,第1...
問個數位電路的問題,一個數位電路問題
高 低電平有個門限值 閥值 再代入 rc 充放電公式計算時間,麻煩。工程的問題多數可以通過實驗得出結果,產生一個近似的公式,對於電路設計精度足夠了。振盪器晶片手冊會給出計算公式。一般設計時鐘電路是不用閘電路的,專用晶片的效能比通用晶片好。如採用運放做比較器就不是好方法。一個數位電路問題 如果四捨五入...
C語言,小問題,C語言,一個小問題
n在c語言中的意思是 回車 照著麼說的,while c getchar n 就是 當 從鍵盤讀取一個值,並賦值給c 不等於回車 說白了就是當你輸入回車 就是恩一下 enter 鍵 時,這一段 就執行結束了。例如 while c getchar n 就是說當你敲入回車後,中的東西就不讀了 當然回車之前...