请求实现生成1-100随机数遇99停止并统计尝试次数的代码
简易解决方案:用do-while循环生成随机数直到命中99
没问题,这是个很典型的循环+随机数场景,我给你写个清晰易懂的C语言实现(毕竟rand()函数最常用在C/C++环境里),逻辑简单还容易扩展:
核心代码实现
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { // 初始化随机数种子,确保每次运行生成的随机序列不同 srand(time(NULL)); int count = 0; int random_num; // do-while循环:至少执行一次尝试,完美贴合"必须尝试直到命中"的需求 do { random_num = rand() % 100 + 1; // 生成1-100的随机数 count++; // 每次尝试计数+1 } while (random_num != 99); // 不是99就继续循环 // 输出结果 printf("共%d次尝试命中数字99\n", count); return 0; }
关键细节拆解
- 随机数种子初始化:
srand(time(NULL))是必不可少的一步——它用当前时间作为种子,避免每次运行程序都生成完全相同的随机数序列。要是去掉这行,你每次运行都会得到一模一样的尝试次数,完全失去了随机的意义。 - 生成1-100的随机数:
rand() % 100会得到0-99的整数,加1后就刚好落在1-100的范围内,完美匹配你的需求。 - do-while的优势:因为我们至少需要尝试一次才能得到随机数,do-while会先执行一次循环体再判断条件,比while循环更贴合这个场景(用while的话,得先手动生成一次随机数再进循环,会多一行冗余代码)。
用while循环的替代写法
如果你更习惯while循环的逻辑,也可以这么写,效果完全一样:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(NULL)); int count = 0; int random_num; while (1) { // 先开无限循环,命中目标再跳出 random_num = rand() % 100 + 1; count++; if (random_num == 99) { break; // 命中99,终止循环 } } printf("共%d次尝试命中数字99\n", count); return 0; }
两种写法都能搞定需求,选你看着顺眼的就行~
内容的提问来源于stack exchange,提问作者Palmoz




