小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回小A 猜对了几次? 输入的 guess 数组为 小 A 每次的猜测,answer数组为 小B 每次的选择。guess 和 answer 的长度都等于 3。如何用c语言写该程序
时间: 2024-02-04 19:02:20 浏览: 43
可以使用一个 for 循环遍历 guess 和 answer 数组,判断小A每次猜测是否和小B的选择相等,如果相等则猜对了一次,最后返回猜对的次数即可。
以下是一个示例代码:
```c
#include <stdio.h>
int main() {
int guess[3] = {1, 2, 3};
int answer[3] = {2, 2, 1};
int correct = 0; // 记录猜对的次数
for (int i = 0; i < 3; i++) {
if (guess[i] == answer[i]) {
correct++;
}
}
printf("小A猜对了%d次\n", correct);
return 0;
}
```
输出结果为:
```
小A猜对了1次
```
相关问题
用c++语言设计一款猜数字游戏 1. 要求: 该游戏可以由程序随机产生一个N位数字,或由用户输入一个N位数字,作为待猜测数字(各位数字不重复出现)。玩游戏者开始猜测后,可以有M次机会输入数字来匹配上面的待猜测数字。用户每输入一次,系统给出本次猜测结果:A表示位置正确且数字正确,B表示数字正确而位置不正确。某次猜中后,游戏结束。若M次机会用完,游戏也结束。菜单格式如图。 2. 基本功能 1)产生待猜测数据,随机生成,或由用户输入。需要判断合法性:N位数字不重复出现。 2)提供最多M次机会猜测,每次反馈猜测结果。成功立即结束猜测返回主菜单。 3)游戏开始前输入用户名,初次使用进行用户注册。游戏成功与否都能返回主菜单。 4)查看结果:查看某一个用户的历史猜测结果,最少猜测次数,成功率; 5)参数M,N可以自由设置 3. 拓展功能: 记录不同的游戏用户的猜测结果,设置猜测排行榜,设置游戏难度等等其它自定义拓展功能
以下是使用C++设计的猜数字游戏的代码,包括基本功能和拓展功能:
```c++
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>
using namespace std;
// 游戏参数设置
const int MAX_CHANCE = 10; // 最多猜测次数
const int MAX_N = 10; // 最大位数
const int MIN_N = 1; // 最小位数
const int MAX_M = 20; // 最大机会数
const int MIN_M = 1; // 最小机会数
// 猜测结果
struct GuessResult {
int A; // 位置和数字都正确的数量
int B; // 数字正确但位置不正确的数量
};
// 玩家信息
struct PlayerInfo {
string name;
int guessCount; // 猜测次数
bool win; // 是否猜中
};
// 生成随机数
string generateNumber(int n) {
string number;
for (int i = 0; i < n; i++) {
char digit = i == 0 ? rand() % 9 + '1' : rand() % 10 + '0';
while (number.find(digit) != string::npos) {
digit = rand() % 10 + '0';
}
number += digit;
}
return number;
}
// 获取猜测结果
GuessResult getGuessResult(const string& secret, const string& guess) {
GuessResult result = { 0, 0 };
for (int i = 0; i < secret.size(); i++) {
if (secret[i] == guess[i]) {
result.A++;
} else if (secret.find(guess[i]) != string::npos) {
result.B++;
}
}
return result;
}
// 游戏界面
void showMenu() {
cout << "1. 开始新游戏" << endl;
cout << "2. 查看历史记录" << endl;
cout << "3. 退出游戏" << endl;
cout << "请选择:";
}
// 开始新游戏
void playGame(vector<PlayerInfo>& players) {
// 输入用户名
string name;
cout << "请输入用户名:";
cin >> name;
// 查找玩家信息
vector<PlayerInfo>::iterator it = find_if(players.begin(), players.end(),
[name](const PlayerInfo& p) {
return p.name == name;
}
);
if (it == players.end()) {
// 创建新玩家信息
players.push_back({ name, 0, false });
it = players.end() - 1;
}
// 输入位数
int n;
cout << "请输入位数(" << MIN_N << " - " << MAX_N << "):";
cin >> n;
while (n < MIN_N || n > MAX_N) {
cout << "位数超出范围,请重新输入(" << MIN_N << " - " << MAX_N << "):";
cin >> n;
}
// 输入机会数
int m;
cout << "请输入机会数(" << MIN_M << " - " << MAX_M << "):";
cin >> m;
while (m < MIN_M || m > MAX_M) {
cout << "机会数超出范围,请重新输入(" << MIN_M << " - " << MAX_M << "):";
cin >> m;
}
// 生成或输入待猜数字
string secret;
char choice;
cout << "是否由程序随机生成待猜数字?(Y/N):";
cin >> choice;
if (choice == 'Y' || choice == 'y') {
secret = generateNumber(n);
} else {
cout << "请输入待猜数字:";
cin >> secret;
while (secret.size() != n || count(secret.begin(), secret.end(), '-') > 0) {
cout << "数字格式错误,请重新输入(" << n << " 位数字,各位数字不重复出现):";
cin >> secret;
}
}
// 开始猜数字
cout << "开始猜数字,共 " << m << " 次机会:" << endl;
for (int i = 1; i <= m; i++) {
string guess;
cout << "第 " << i << " 次猜测:";
cin >> guess;
while (guess.size() != n || count(guess.begin(), guess.end(), '-') > 0) {
cout << "数字格式错误,请重新输入(" << n << " 位数字,各位数字不重复出现):";
cin >> guess;
}
GuessResult result = getGuessResult(secret, guess);
cout << "结果:" << result.A << "A" << result.B << "B" << endl;
if (result.A == n) {
// 猜中了
cout << "恭喜你,猜中了!" << endl;
it->guessCount += i;
it->win = true;
return;
}
}
// 未猜中
cout << "很遗憾,游戏结束!正确数字是:" << secret << endl;
}
// 查看历史记录
void showRecords(const vector<PlayerInfo>& players) {
if (players.empty()) {
cout << "暂无历史记录!" << endl;
return;
}
// 按猜测次数排序
vector<PlayerInfo> sortedPlayers = players;
sort(sortedPlayers.begin(), sortedPlayers.end(),
[](const PlayerInfo& p1, const PlayerInfo& p2) {
return p1.guessCount < p2.guessCount;
}
);
cout << "用户名\t\t猜测次数\t成功率" << endl;
for (const PlayerInfo& p : sortedPlayers) {
double winRate = p.win ? 100.0 : 0.0;
if (p.guessCount > 0) {
winRate = 1.0 * count_if(sortedPlayers.begin(), sortedPlayers.end(),
[](const PlayerInfo& p) {
return p.win;
}
) / sortedPlayers.size() * 100;
}
printf("%-16s\t%-12d\t%.2f%%\n", p.name.c_str(), p.guessCount, winRate);
}
}
int main() {
srand(static_cast<unsigned int>(time(nullptr)));
// 玩家信息
vector<PlayerInfo> players;
// 主菜单
while (true) {
showMenu();
int choice;
cin >> choice;
switch (choice) {
case 1:
playGame(players);
break;
case 2:
showRecords(players);
break;
case 3:
return 0;
default:
cout << "无效选项,请重新选择!" << endl;
break;
}
}
return 0;
}
```
该程序包括以下功能:
1. 用户输入用户名,并根据输入的位数和机会数生成或输入待猜数字;
2. 用户最多可以猜测 M 次,每次输入一个 N 位数字,系统给出本次猜测结果;
3. 游戏结束时,会记录玩家的猜测次数和是否猜中,保存在玩家信息中;
4. 用户可以查看历史记录,包括不同玩家的猜测次数、成功率等信息。
1. 执行guess.py运行游戏; 2. 脚本随机生成一个没有重复的四个阿拉伯数字的序列(可以0为首),然后处于待输入状态等待用户输入; 3. 玩家输入4个阿拉伯数字后,游戏根据输入打印出几A几B的反馈信息; 4. 玩家重复输入4个阿拉伯数字,直到游戏反馈4A0B的结果结束。 (上述是基本要求)
好的,那我现在就来给你写一个猜数字的小游戏,你可以在命令行中运行它。
```python
import random
def generate_number():
# 生成不重复的四个数字
digits = list(range(10))
random.shuffle(digits)
if digits[0] == 0:
# 首位不能为0,将0和第二位交换
digits[0], digits[1] = digits[1], digits[0]
return digits[:4]
def check_guess(answer, guess):
# 检查猜测结果,返回几A几B
a = b = 0
for i in range(len(answer)):
if answer[i] == guess[i]:
a += 1
elif guess[i] in answer:
b += 1
return a, b
if __name__ == '__main__':
answer = generate_number()
print('猜数字游戏开始!')
while True:
guess = input('请输入四个不重复的数字(以空格分隔):')
guess = guess.strip().split()
if len(guess) != 4:
print('输入错误,请重新输入!')
continue
try:
guess = [int(x) for x in guess]
except ValueError:
print('输入错误,请重新输入!')
continue
if len(set(guess)) != 4:
print('输入错误,请重新输入!')
continue
a, b = check_guess(answer, guess)
print(f'{a}A{b}B')
if a == 4:
print('恭喜你猜对了!')
break
```
这个小游戏会在命令行中生成一个四位不重复的数字,然后你需要输入四个不重复的数字来猜测它。每次猜测后,程序会给出几A几B的反馈,直到你猜中为止。