vectorアプリケーション-ccf 1712-2周囲報数

1332 ワード

問題の説明
1からn番の子供は時計回りに1周座って、輪を囲んで数えます.1つの子供新聞の数がkの倍数またはその末数(すなわち数のビット)がkである場合、その子供は淘汰される.
子供が一人しか残っていないとき、その子供は勝った.
例えば、n=5、k=2の場合:1番の子供は1を報告します.2番の子供は2で淘汰された.3番の子供は3を数えます;4番の子供は4で淘汰された.5番の子供は5を数えます;1番の子供は6で淘汰された.3番の子供は7を数えます;5番の子供は8で淘汰された.3番の子供が勝った.
nとkを与えて、最後に勝った子供の番号はいくらですか?
入力フォーマット
2つの整数nとkを含む1行を入力し、タイトルで説明したように意味します.
出力フォーマット
勝った子供の番号を表す整数を含む行を出力します.
サンプル入力
5 2
サンプル出力
3
サンプル入力
7 3
サンプル出力
4
データ規模と約定
すべての評価例について、1≦n≦1000、1≦k≦9であった.
ぶんせき
vectorと反復器を適用します.
	vectorv;
	vector::iterator it;

最初は、反復器はv.begin()を指し、反復がv.end()になると、v.begin()を再び指し、それによってサイクルを達成する.v.size()==1でサイクルを終了する.
サイクル中、カウントが淘汰値に報告されると、その要素はvector:v.erase(it);から直接移動されます.
code
#include
using namespace std;

int a[1005]={0};  //0   ,1   
int main(){
	
	int n,k;
	cin>>n>>k;
	 
	vectorv;
	vector::iterator it;
	//        
	for(int i=1;i<=n;i++){
		v.push_back(i);
	}
	//     
	int count=0;//   
	for(it=v.begin();v.size()!=1;){  //vector              
		//       ,       
		if(it==v.end()) 
			it=v.begin();
		count++;
		if(count%10==k || count%k==0){  //   k   k    
			//cout<