合工大OJ--PID1345--数7

来源:互联网 发布:鹿鼎记 知乎 编辑:程序博客网 时间:2024/06/06 15:03

题目大意:

本题大意是一堆小朋友玩酒桌游戏:所有人围一圈,编号1~n,从其中某个编号为a的小朋友开始说出一个合数b(非质数但不包括1,最小的合数为4),其中编号为m的小明比较
聪明。他想着,从b开始数,每次说完都加1,如果加1后为质数则此人敲桌子一下(duang),并且循环方向发生改变。直至轮到他自己,并输出小明应该Duang还是说出这个合
数。

我的思路:

在我看来,这道题有两点应该注意,第一:判断质数;第二:循环方向的改变。

源码:

#include <iostream>#include <cstdio>#include <cmath>using namespace std;//此函数用于判断质数 bool isSushu(int value){if(value == 1){return false;} int a = sqrt(value);for(int i = 2;i<=a;i++){if(value % i == 0){return false;}}return true;}int main(){int t;int n,m;int a,b;cin>>t;while(t-- != 0){cin>>n>>m;//n代表总共人数 m代表小明的序号 cin>>a>>b;//a代表开始人的序号,b代表他所说的数字 bool f = false;//小明已经说过则为true,否则为false int result = b;int flag = 1;//用作循环方向的标记 ,默认正向循环 while(!f){//只要还没有轮到小明就一直循环下去...... if(a == (n+1)){//如果轮了一圈了则返回到第一个人 a = 1;}if(isSushu(result)){//碰到质数,循环方向发生改变 flag = -flag;}if(a == m){//判断是否轮到小明 if(isSushu(result)){//轮到小明时是否为素数 cout<<"duang"<<endl;}else{cout<<result<<endl;}f = true;}if(flag == -1){//反向循环 a--;}else{//正向循环 a++;}result ++;//要判断的数要持续加 1 }}}

原创粉丝点击