【2014】扑克问题
来源:互联网 发布:spark入门书籍推荐知乎 编辑:程序博客网 时间:2024/04/28 14:32
Time Limit: 3 second
Memory Limit: 2 MB
有52张扑克牌,使它们全部正面朝上。从第2张牌开始,把凡是2的倍数位置上的牌翻成正面朝下;接着从第3张牌开始,把凡是3的倍数位置上的牌正面朝上的翻成正面朝下,正面朝下的翻成正面朝上;接着从第4张牌开始,把凡是4的倍数位置上的牌按此规律翻转;依次类推,直到第1张牌是52张(第52张不翻)为止。统计最后有几张牌正面朝上,并打印出它们的位置。
Input
无输入
Output
第一行输出正面朝上的牌的张数
第二行依次输出牌的位置,用空格隔开,最后以回车结束
Sample Input
Sample Output
第一行输出正面朝上的牌的张数第二行依次输出牌的位置,用空格隔开,最后以回车结束
【题解】
只要按题目模拟就可以了.
5的话虽然是质数,但会被5整除,所以最后会是朝下。
16 有 2 8 4 4 1 16 但是4 只算一遍 1没有被算。最后是偶数,又翻回来。20的话有 2 10 4 5 1 20 但是1没有算 所以最后是奇数个,翻至背面。依次规律可以得知只有完全平方数才符合要求。同时还有52.。。。
【代码】
#include <cstdio>const int MAXN = 52;bool bo[MAXN+10];int num = 0,a[MAXN+10];void init() //先初始化数组 表示所有数都正面朝上{ for (int i = 1;i <= 52;i++) bo[i] = true;}void get_ans(){ for (int i = 2;i <= 51;i++) //开始按照题目要求模拟即可 记住52不能翻。 for (int j = 2;j <= 52;j++) if (j % i == 0) bo[j] = 1-bo[j]; //这个算式可以表示翻面。}void output_ans(){ for (int i = 1;i <= 52;i++) //记录下答案 然后输出即可。 if (bo[i]) a[++num] = i; printf("%d\n",num); for (int i = 1;i <= num-1;i++) printf("%d ",a[i]); printf("%d\n",a[num]);}int main(){ init(); get_ans(); output_ans(); return 0;}
0 0
- 【2014】扑克问题
- 蓝桥杯-扑克序列问题
- 扑克排序的两个问题
- 2014年蓝桥杯java B组第7题 扑克序列问题
- 有关扑克中三条出现的概率问题?
- [例题] 电动扑克比大小问题
- 德州扑克判断数字组成问题
- 16张扑克逻辑思维问题详解
- 一个有关扑克牌牌型分析的问题
- 一个有关扑克牌牌型分析的问题
- 一个有关扑克牌牌型分析的问题
- 一个有关扑克牌牌型分析的问题
- 一个有关扑克牌牌型分析的问题
- 一个有关扑克牌牌型分析的问题
- 一个有关扑克牌牌型分析的问题
- 扑克的顺子问题(转自何海涛)
- 扑克游戏
- 估算扑克
- TACACS
- 玩转树莓派之二----中文设置
- SMT表面贴装工艺的三大步骤
- js字符串截取函数slice()、substring()、substr()
- Xcode去除版本控制
- 【2014】扑克问题
- 使用JAX-WS开发简单webservice
- JAVA wait(), notify(),sleep详解
- Ueditor在php中上传至七牛
- 常见面试题之一
- 动态删除li标签
- 大话设计模式c++实现——装饰模式
- Golang func -函数 1
- 当导入dmp文件时,发现报错时,可能是由于表空间不足造成的,查询与增加oracle 表空间的方法如下