武松又来景阳冈喝酒了,这次酒老板给他出了个难题:老板拿出很多碗酒,在桌子上摆成圆形,然后告诉武松,本地规矩,喝酒要数数,数到9的倍数或者数字里含有9才能喝,同时,本地人很讨厌7,所以如果数字是7的倍数或者数字里含有7就不能喝。比如,9,19可以喝,数到27就不能喝。老板告诉武松,酒碗按顺时针方向从1开始编号,从1号开始数起。老板说,如果武松能告诉他,他依次喝的酒碗的编号,就让他过去。你能帮帮他吗?
输入格式:
输入:在一行中给出1个整数N,表示酒的碗数,N不超过3000。
输出格式:
对每一组输入,在一行中输出酒碗的编号,中间用一个空格分隔,首尾不能有多余的空格。
输入样例:
在这里给出一组输入。例如:
3
输出样例:
在这里给出相应的输出。例如:
3 1 2
代码示例如下:
#include<iostream>
#include<vector>
using namespace std;
vector<int >b;
int f1(int n) {
if(n==9)
return 1;
while(n>10) {
int x=n%10;
if(x==9) {
return 1;
}
n/=10;
}
if(n==9)
return 1;
return 0;
}
int f2(int n) {
if(n==7)
return 1;
while(n>10) {
int x=n%10;
if(x==7) {
return 1;
}
n/=10;
}
if(n==7)
return 1;
return 0;
}
int main() {
int n,m;
cin>>n;
for(int i=1; i<=n; i++)
b.push_back(i);
int cnt=0;
vector<int>::iterator ij=b.end();
vector<int>::iterator it=b.begin();
while(b.size()) {
cnt++;
//cout<<"cnt="<<cnt<<" "<<"*it="<<*it<<" "<<endl;
if(cnt%9==0&&f2(cnt)==0&&cnt%7!=0) {
cout<<*it;//满足条件了就输出
if(b.size()!=1)
cout<<" ";
b.erase(it);//叫到了记得在数组中去除
if(it==b.end())//到了数组边界,从头开始
it=b.begin();
continue;
} else if(f1(cnt)==1&&f2(cnt)==0&&cnt%7!=0) {
cout<<*it;//满足条件了就输出
if(b.size()!=1)
cout<<" ";
it=b.erase(it);//叫到了记得在数组中去除
if(it==b.end())//到了数组边界,从头开始
it=b.begin();
continue;
}
it++;
if(it==b.end())//到了数组边界,从头开始
it=b.begin();
}
return 0;
}