1. 程式人生 > 其它 >SQL優化經歷記錄

SQL優化經歷記錄

約瑟夫問題

題目描述

\(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;
}