所谓翻牌,就是将原来正面朝上的牌翻过来变成背面朝上,原来背面朝上的牌翻过来变成正面朝上。
现在有 n 张扑克牌正面朝上一字排开摊在桌面上,依次编号为 1、2、、n。首先对 2 的倍数翻牌,再对 3 的倍数翻牌,接下来对 4、5、……、n 的倍数翻牌。
请问最后哪些牌正面朝上。
扑克牌张数 n (0<n≤10000)
正面朝上牌的编号(以空格间隔)
6
1 4
#include<iostream> #include<string> #include<vector> using namespace std; int main() { int n,tmp,tmp1=0; cin>>n; vector<int>a(n+1); for(int i=2;i<=n;i++) { tmp=i; for(int j=2;tmp<=n;j++) { if(a[tmp]==0) a[tmp]=1; else if(a[tmp]==1) a[tmp]=0; tmp=i*j; } } for(int i=1;i<=n;i++) { if(a[i]==0) tmp1++; } for(int i=1;i<=n;i++) { if(a[i]==0) if(tmp1!=1) printf("%d ",i),tmp1--; else printf("%d",i); } }
原文:https://www.cnblogs.com/luoyoooo/p/12215742.html