HDOJ 1014 模拟

题目大意:给出两个数 ,s,m,按照题目中的要求计算生成的随机数列,判断是否生成了0~m-1这m个数列,若是则是好的选择,否则是坏的选择。

算法思想;

用一个标记flag[MAXN]来记录前0~m-1是否生成,同时用num记录数列的长度,循环判断当前的数是否先前生成过,若没有则标记,否及判断num是否等于m,若等则是一个好的选择,不等则不是一个好选择。输出时s,m均占10个字节有队齐,字符串从25列开始输出,左对齐。每个用例后空一行。

代码如下:

#include <iostream>
#include <iomanip>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN=111111;
bool flag[MAXN];
int main(){
    int s,m;
    int seed;
    while(cin>>s>>m){
      int num=0;
      memset(flag,0,sizeof(flag));
      seed=0;
      while(!flag[seed]){  
         flag[seed]=true;
         seed=(seed+s)%m;
         num++;  
      }
      if(num==m) cout<<right<<setw(10)<<s<<setw(10)<<m<<"    "<<left<<"Good Choice"<<endl<<endl;
      else cout<<right<<setw(10)<<s<<setw(10)<<m<<"    "<<left<<"Bad Choice"<<endl<<endl;
    }    
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值