题目:
逢 7 过是一个经典的游戏,游戏规则为从数字 1 开始轮流报数,凡是遇到任何带有数字 7 或是 7 的倍数的数字都应该 Pass。例如:17,78,14 都应该为 Pass,因为 17 和 78 中含有数字 7,14 是 7 的倍数;而 36,88 不需要 Pass,因为 36 和 88 既不是 7 的倍数,也没有包含 7。
Alice 在研究这个游戏,请你帮助 Alice 判断一下 100 以内中的哪些数字需要 Pass。
Input:
第一行输入一个整数 T (1≤T≤100),表示用例组数;
接下来 T 行,每行一个整数 n (1≤n≤100),表示询问的数字。
Output:
输出共 T 行,若对于数字 n 需要 Pass,输出Pass
,否则输出该整数。
Sample:
Example Input:
10
1
6
7
17
78
14
36
88
77
100
Example Output:
1
6
Pass
Pass
Pass
Pass
36
88
Pass
100
代码长度限制
16 KB
时间限制
500 ms
内存限制
256 MB
栈限制
8192 KB
基本原理:
- 在
while (T--)
语句中,首先会检查T
是否为真(即非零),然后执行循环体。每次循环结束后,T
会减少 1。 - 直到
T
的值变为 0(即T
变为假,T--
的结果是 0),循环会停止while (T--) { }
str.find('7')
是 C++ 中std::string
类的一个成员函数,用于查找字符'7'
在字符串str
中首次出现的位置。- 返回值:
- 如果找到字符
'7'
,则find
返回该字符在字符串中的位置(即索引)。位置是从0
开始的。 - 如果找不到字符
'7'
,则find
返回一个特殊的常量std::string::npos
,表示没有找到。
- 如果找到字符
所以如果 str.find('7')
不等于 npos
,就说明找到了字符 '7',
需要输出Pass
if (str.find("7") != string::npos)
{
cout << "Pass" << endl;
}
完整代码:
#include <iostream>
using namespace std;
int main() {
int T;
cin >> T; // 读取用例组数
while (T--) {
int n;
cin >> n; // 读取每个数字
// 判断是否是7的倍数或包含7
if (n % 7 == 0 || to_string(n).find('7') != string::npos) {
cout << "Pass" << endl;
} else {
cout << n << endl;
}
}
return 0;
}