文章

33

粉丝

0

获赞

136

访问

3.8k

头像
击鼓传花 题解:模拟
P1018 贵州大学机试题
发布于2026年3月15日 10:37
阅读数 93

#include<bits/stdc++.h>

using namespace std;



int main(){
	int n;
	cin>>n;
	
	if(n<=0) return 0;
	
	list<int> lst;
	
	for(int i=1;i<=n;i++) lst.push_back(i);  //存 1,2,...,n
	
	auto it = lst.begin();
	while(lst.size()>1){//直到最后一个元素之前 都执行迭代
		
		
		int d = 2; 
		while(d--){//移动  1->3  erase(3)  4->1 erase(1) 2->...
			it++;
			if(it==lst.end()) it = lst.begin();
			
		}
	
		
		it = lst.erase(it);//示例如下
/****
		1  2  3  4  5
			  ↑
			  it
			  
		it = lst.erase(it)

		1  2  4  5
			  ↑
			  it

****/
//		cout<<"it = "<<*it<<endl;  调试,这里之前把auto it放while里面了,没看出哪里错.只能输出出来看情况
		if(it == lst.end())it = lst.begin();
		
		
	}
	it = lst.begin();
	
	cout<<*it;
	
return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发