注意:前提又是可以输入多组数据
方法1(自己的方法,数组的方式)
#include<iostream>
using namespace std;
int main()
{
int n,m;
int shang,yu;
while(cin>>n){
if(n>1000) n=1000;
int a[1000];
int b[1000];
for(int i=0;i<n;i++) a[i]=i;
while(n!=2){
shang = n/3;
yu = n%3;
m=0;
// m = shang*2+yu;
for(int i=3*(n/3);i<n;i++){
b[m++]=a[i];
}
for(int i=0;i<3*(n/3);i++){
if((i+1)%3!=0)
b[m++]=a[i];
}
for(int i=0;i<m;i++){
a[i]=b[i];
}
n=m;
}
cout<<a[1]<<endl;
}
return 0;
}
方法2(室友的方法,向量的方式)
知识点1:arr.erase(arr.begin() + 2 + 2 * i); //删除向量中第2+2*i个后面的那个数
知识点2:arr.insert(arr.begin(), *(arr.end() - 1)); //将最后一个数插入到第一个(此时最后一个值保留)
知识点3:arr.pop_back(); //删除最后一个值
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n;
//cin >> n;
while(cin>>n){
if (n > 1000) n = 1000;
vector<int> arr;
for (int i = 0; i < n; i++) {
arr.push_back(i);
}
while (arr.size() != 2) {
int num = arr.size() / 3;
int AT_end = arr.size() % 3;
for (int i = 0; i <num; i++)
{
arr.erase(arr.begin() + 2 + 2 * i); //删除第2+2*i个后面的那个数
}
if (AT_end == 1)
{
arr.insert(arr.begin(), *(arr.end() - 1)); //将最后一个数插入到第一个(此时最后一个值保留)
arr.pop_back(); //删除最后一个值
}
if (AT_end == 2)
{
arr.insert(arr.begin(), *(arr.end() - 1));
arr.pop_back();
arr.insert(arr.begin(), *(arr.end() - 1));
arr.pop_back();
}
}
cout << arr[1] << endl;
}
//system("pause");
return 0;
}
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
string a;
//cin>>a;
while(cin>>a){
int len = a.length();
vector<char> v;
for(int i=0;i<len;i++){
if(count(v.begin(),v.end(),a[i])==0){
v.push_back(a[i]);
}
}
for(int i=0;i<v.size();i++){
cout<<v[i];
}
cout<<endl;
}
return 0;
}