SQL優化經歷記錄
阿新 • • 發佈:2022-05-29
約瑟夫問題
題目描述
\(n\) 個人圍成一圈,從第一個人開始報數,數到 \(m\) 的人出列,再由下一個人重新從 \(1\) 開始報數,數到 \(m\) 的人再出圈,依次類推,直到所有的人都出圈,請輸出依次出圈人的編號。
注意:本題和《深入淺出-基礎篇》上例題的表述稍有不同。書上表述是給出淘汰 \(n-1\) 名小朋友,而該題是全部出圈。
輸入格式
輸入兩個整數 \(n,m\)。
輸出格式
輸出一行 \(n\) 個整數,按順序輸出每個出圈人的編號。
樣例 #1
樣例輸入 #1
10 3
樣例輸出 #1
3 6 9 2 7 1 8 5 10 4
提示
\(1 \le m, n \le 100\)
思路
其意思就是n個人報數,第m個人出列,然後一直迭代直到全部人出列。
考慮用一種思路,就是我不直接記錄裡面的資料,我直接記錄裡面人的報數情況然後將他們輸出,這樣直接處理。
程式碼
#include<bits/stdc++.h> using namespace std; int n,m,i,cnt,a[101]; int main(){ cin>>n>>m; i=0;//用於記錄報數 while(cnt<n) for(int j=1;j<=n;j++){ if(a[j]==0){ i++; if(i%m==0){ printf("%d ",j); a[j]=1; cnt++; } } } return 0; }