組合數的輸出(while循環)
- 練習題目如下
- 算法思路
這種組合數的算法類似於湊硬幣程序,就是通過組合不同的數字來實現輸出。可以將 i,j,k 看成是不同的層,當 i,j 固定時讓循環最內層的k進行累加,k 不滿足條件時,返回到 j 層的循環,以此類推。
在輸出條件語句的控制上,設置 cnt 計數器滿足 cnt==6 則換行,否則輸出空格。 - 代碼如下
/*
給定不超過6的正整數,考慮從A開始的4個連續數字,
請輸出所有由它們組成的無重複數字的3位數。
*/
#include<stdio.h>
int main()
{
int i,j,k;
int a;
int cnt=1;
printf("please input number:");
scanf("%d",&a);
i=a;
while(i<=a+3){
j=a;
while(j<=a+3){
k=a;
while(k<=a+3){
if(i!=j&&j!=k&&k!=i){
printf("%d%d%d",i,j,k);
if(cnt==6){
printf("\n");
cnt = 1;
}
else
{
printf(" ");
cnt++;
}
}
k++;
}
j++;
}
i++;
}
return 0;
}
代碼輸出:
please input number:2
234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543
--------------------------------
Process exited after 1.417 seconds with return value 0
請按任意鍵繼續. . .
代碼分析:
if(cnt==6){
printf("\n");
cnt = 1;
}
else
{
printf(" ");
cnt++;
}
這裏對 cnt == 6時計數變量又重新初始化,對於大型程序比起使用 (cnt%6)的性能更好。