1樓:匿名使用者
講一下基本思路,
定義乙個陣列,先全部歸零。
然後處理,當零的時候沒有退出,1的時候推出知道推出到最後乙個核心**
int a[1000], n, i, num=1, index=0,flag=1;
scanf("%d", &n);
memset(a, 0, sizeof(a));
while(num!=n+1)
else flag++;
}index++;index%=n;
}for(int i=1;i<=n;i++)printf("\n")
2樓:匿名使用者
#define n 100; //這裡你隨便改。
int result[n]; //這個陣列用來存放結果,為了一一對應,n個人裡,第乙個的序號是0,不是我們習慣採用的1。
int flag[n]; //這個陣列用來標記這個n個人的狀態,一一對應,報過3的所對應的標記為1,否則0。
所以初始化話時,flag裡面都為0。
for(int i = 0; i < n; i++) flag[i] = 0;
當陣列flag裡面所有的元素都為1的時候,也就是flag的和為n時,表示計算完成了。
為了使調理清晰先做乙個子函式bool sumflag()
bool sumflag()
下面開始運算
int currentnumber = 1; //這個變數用於記錄報數值。
int index = 0; //這個變數用於記錄寫入result的索引號。其實也可以用這個值來判斷是否完成了計算。
while(sumflag()) //當flag裡面不全是1的時候,進行下面的操作,否則結束。
else currentnumber++; //當前報數不是3,則要麼是1,要麼是2,直接增加報數值。}}
3樓:匿名使用者
不能除錯,不知道對不對,不過想來沒有問題,你試試#include"iostream.h"
void main()
num++;
mk=0;
}mk++;
}for(i=0;i
4樓:匿名使用者
#include
int main()
else
count++;}}}
c語言有n個人圍成一圈,順序排號。從第乙個人開始報數(從1到3報 數)凡報到3的人退出圈子麻煩注釋下**
5樓:凌亂心扉
#include
#define n 5//人數
void main()
,i=0,out_n=0,call_n=0,*p;
p=a;
while(1)//為0(即3)出局
}p++;if(p==a+n)p=a;//迴圈轉向下一人
}printf("最後剩餘者的編號是:%d\n",p+1-a);
}printf()函式是格式化輸出函式,一般用於向標準輸出裝置按規定格式輸出資訊。在編寫程式時經常會用到此函式。
函式的原型為:int printf(const char*format,...);函式返回值為整型。若成功則返回輸出的字元數,輸出出錯則返回負值。
printf()函式的呼叫格式為:
printf("<;格式化字串》",《參量表》);
其中格式化字串包括兩部分內容:一部分是正常字元;這些字元將按原樣輸出;另一部分是格式化規定字元,以"%"開始,後跟乙個或幾個規定字元,用來確定輸出內容格式。
參量表是需要輸出的一系列引數,其個數必須與格式化字串所說明的輸出引數個數一樣多,各引數之間用","分開,且順序一一對應,否則將會出現意想不到的錯誤。
規定符%d十進位制有符號整數
%u十進位制無符號整數
%f浮點數
%s字串
%c單個字元
%p指標的值
%e指數形式的浮點數
%x,%x無符號以十六進製制表示的整數
%o無符號以八進位制表示的整數
%g把輸出的值按照%e或者%f型別中輸出長度較小的方式輸出
%p輸出位址符
%lu 32位無符號整數
%llu 64位無符號整數
6樓:
int main(void)
i++;///每考察1個位子,無論是否有人都得將位子向後移1位if(i==n)///若已把位子移到最後1人的後面了則將其歸0,重新從頭記數
i=0;
} for(i=0;i
三個///後面的是我給你的注釋。不明白續問。
7樓:聽不清啊
void main()
i++; //移到下乙個位置
if(i==n)i=0; //若超出範圍,重回頭上} //此迴圈結束時,已有n-1人退出圈子for(i=0;i 8樓:匿名使用者 #include #include int main(int argc, char *argv)printf("\n退席的人編號為: "); i=0; count=0; //出列人數---計數mm=1; //從1開始數 while(count=n) //當陣列下標大於總人數時,從0開始,也就是陣列尾接上陣列頭 }return 0;} 9樓: 第一輪: 3的倍數(共33個)去掉,還剩67個 第二輪:3的倍數加1(共33個)去掉,還剩34個第三輪:3的倍數加2(共32個)去掉,還剩2個不好意思,最後必定剩下2個,且最後留下來的是1號和2號(從3開始一直到100不是滿足3的倍數就是滿足3的倍數加1就是滿足3的倍數加2,所以全部被去除) 10樓:象晏盤田然 #include void main() ;//0表示退出圈 子printf("input n:"); scanf("%d", &n); for(i=0; i 0;while (out !=n-1) if(num ==3) i++; if(i ==n) }for(i= 0;i< n;i++)}} 11樓:匿名使用者 #include int main() printf("%d\n",s+1); return 0;} c語言:有n個人圍成一圈,順序排號。從第乙個人開始報數(從1到3報 數),凡報到3的人退出圈子,最 12樓:匿名使用者 第一步:設計乙個陣列a[n],將陣列的元素全部初始為0. 第二步:迴圈計數i和j,如果a[i]全為0則j到3就讓a[i]=1,如果中間有a[i]=1,跳過這個計數,j繼續增長直到3再執行a[i]=1 第三步:在第二步的同時判斷i是否迴圈到陣列的終點,即不能超過a的長度,否則將i置0繼續迴圈遍歷陣列,執行第二步。 第四步:輸出最後乙個元素的位置+1就是最後乙個人 (因為陣列是從0開始計數的) 13樓:真心很煩 你是要求個位有三就退出嗎? c語言問題:有n個人圍成一圈,順序排號。從第乙個人開始報數(從1到3報數), 14樓: 供參考…… #include "stdio.h" int main(int argc,char *argv) c語言:有n人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子, 15樓:匿名使用者 #include #include #include int main() }array[j] = 1; }for(i=0;i if(array[i]==0) printf("alive: %d\n",i+1); free(array);}} 16樓:匿名使用者 法一(模擬法): #include using std::cin; using std::cout; int main() bool * a = new bool [n+1]; a[0]=false; for(int i=1;i環計數變數,x為人員序號,k為剩餘人數 while(k!=0) //當數到3時,退出人員設為false,剩餘人數減1,i設為0,重新計數 }cout<<"留下來的人序號為: "< 法二(遞迴法): 此題可用數學方法求解。 設有n個人(編號0~(n-1)),從0開始報數,報到(m-1)的退出,剩下的人繼續從0開始報數 (用數學方法解的時候需要注意應當從0開始編號,因為取余會取到0解。) 實質是乙個遞推,n個人中最終留下來的序號與n-1個人中留下來的人的序號有乙個遞推關係式。 假設除去第k個人,則 0, 1, 2, 3, ..., k-2, k-1, k, ..., n-1 // 原始序列 (1) 0, 1, 2, 3, ..., k-2, , k, ..., n-1 // 除去第k人,即除去序號為k-1的人 (2) k, k+1, ..., n-1, 0, 1, ..., k-2 // 以序號k為起始,從k開始報0 (3) 0, 1, ..., n-k-1, n-k, n-k+1, ..., n-2 // 作編號轉換,此時隊列為n-1人 (4) 變換後就完完全全成為了(n-1)個人報數的子問題,注意(1)式和(4)式,是同乙個問題,不同的僅僅是人數。比較(4)和(3),不難看出,0+k=k, 1+k=k+1, ... ,(3)式中'0'後面的數字, ((n-3)+k)%n=k-3,((n-2)+k)%n=k-2, 對於(3)式中'0'前面的數字,由於比n小,也可看作(0+k)%n=k, (1+k)%n=k+1, 故可得出規律: 設(3)中某一數為x' , (4)中對應的數為x,則有:x'=(x+k)%n. 設x為最終留下的人序號時,佇列只剩下1人時,顯然x=0; 此時可向前回溯至2人時x對應的序號,3人時x對應的序號……直至n人時x的序號,即為所求。 #include using namespace std; const int m = 3; int main() {int n,f=0; cin >> n; for (int i=2;i<=n;i++) f=(f+m)%i; cout < 有n個人圍成一圈,順序排號。從第乙個人開始報數(從1到3報數),凡報到3的人退出 圈子,問最後留下的是原
5 17樓: 呵呵,同乙個人啊 我還是貼出來吧 #include void main() i++;//將指標後移,雖然i不是指標,但p+i就是指標了,所以i就是為指標服務的 if(i==n)//如果指標移到了尾部,則返回到頭部i=0; }//以上的迴圈是主要焦點,後面的就是找出最後那個人,這個好理解while(*p==0)//用這個可以只判斷所找號的前面的號(包括所找號),不用判斷後面的。 p++; printf("the last one is n0.%d\n",*p);} 18樓:徐臨祥 第一步:設計乙個陣列a[n],將陣列的元素全部初始為0. 第二步:迴圈計數i和j,如果a[i]全為0則j到3就讓a[i]=1,如果中間有a[i]=1,跳過這個計數,j繼續增長直到3再執行a[i]=1 第三步:在第二步的同時判斷i是否迴圈到陣列的終點,即不能超過a的長度,否則將i置0繼續迴圈遍歷陣列,執行第二步。 第四步:輸出最後乙個元素的位置+1就是最後乙個人 (因為陣列是從0開始計數的)0 八面來風 讀音 b mi n l i f ng 釋義 來自四面八方的資訊 意見和其他資源。通常指各方面條件具備得相當好,辦事成功的概率非常高,也有對於一件事情的處理辦法聽取多方意見的含意。例句 傾聽聲音,關注八面來風。將身邊的新聞告訴我們,記錄下你的所思 所想,讓我們一起分享。天南地北的,這裡是你們... 採用數列的方法來計算,第乙個人報的數為a1 第二個為a2 第三個為a3 這樣的話劇題意可以得到十個加式 a10 a2 2 a1 a3 4 a2 a4 6 a9 a1 20 由此可以得到a1 a2 a3 a10 1 2 3 10 55 則a2 a4 a5 a6 a7 a8 a9 a10 51 a4 a... 有五個小朋友手拉手站成一行有五隻手拉在一起是對是錯呀?有五個小朋友手拉手站成一行有五隻手拉在一起是不對的,有4隻手拉在一起才是正確的。網路是好還是不好?例如 在前幾年發生過一起網路偷盜事件,就是幾名電腦高手利用網路,向銀行的電腦防護系統進行攻擊,當防護系統被破壞掉之後,他們就鑽進電腦裡去,更改了他們...八隻蜜蜂圍成一圈是什麼成語,8只蜜蜂圍成乙個圈是什麼成語
人圍成一圈做遊戲,遊戲規則為 每個人心裡想數,並把
有一群小朋友圍成一圈手拉手,有十六隻手拉在一起,有幾個小朋友