这个题目不难,关键是看懂英文:(判断两个数是否互质,而且注意输出的格式)
描述 计算机模拟通常需要随机数。生成伪随机数的一种方式是通过一定形式的函数: seed(x + 1)= [seed(x)+ STEP]%MOD 其中‘%‘是模运算符。 这样的函数将生成在0和MOD-1之间的伪随机数(种子)。这种形式的作用的一个问题就是,它们将总是重复地生成相同的模式。 为了最小化这种影响,仔细选择STEP和MOD值,可以使得在0和MOD-1(包括这两者)之间的所有值的均匀分布。 例如,如果STEP = 3和MOD = 5,该函数将在重复周期中生成一系列伪随机数0,3,1,4,2。在该示例中,将在函数的每个MOD迭代中生成包括0和MOD-1之间的所有数字。注意,由于每次产生种子(x)时生成相同种子(x + 1)的函数的性质,意味着如果函数将生成在0和MOD-1之间的所有数字,则它将均匀地生成伪随机数与每个MOD迭代。 如果STEP = 15和MOD = 20,该函数生成系列0,15,10,5(或任何其他重复系列,如果初始种子不是0)。这是一个很差的STEP和MOD选择,因为没有初始种子将生成从0和MOD-1的所有数字。 您的程序将确定STEP和MOD的选择是否将生成伪随机数的均匀分布。 输入 每一行输入将按顺序包含一对用于STEP和MOD的整数(1 <= STEP,MOD <= 100000)。 输出 对于每一行输入,您的程序应在第1列至第10列右对齐输出STEP值,第11列至第20列右对齐的MOD值,以及从第25列左对齐输出“Good Choice”或“Bad Choice” 。当生成MOD号时,选择STEP和MOD将生成0和MOD-1之间的所有数字时,应输出“Good Choice”信息。否则,您的程序应输出信息“Bad Choice”。在每个输出测试集之后,程序应该输出一个空白行。 样例输入 3 5 15 20 63923 99999 样例输出 3 5 Good Choice 15 20 Bad Choice 63923 99999 Good Choice
问题
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 int gcd(int a, int b) 7 { 8 return a%b?gcd(b,a%b):b; 9 } 10 11 int main () 12 { 13 char tab[2][15] = {"Bad Choice", "Good Choice"} ; 14 int a, b ; 15 while (~scanf ("%d%d", &a, &b)) 16 { 17 printf ("%10d%10d %s\n\n", a, b, tab[gcd(a,b)==1]) ; 18 } 19 return 0 ; 20 }
精简代码
时间: 2024-10-27 23:28:36