解题思路
-
题目要求统计1到n之间与7有关的数字的个数,包括:
- 是7的倍数(如7, 14, 21等)
- 包含数字7(如7, 17, 27, 70, 71, 72等)
-
实现思路:
- 遍历1到
的每个数字
- 判断是否是7的倍数
- 将数字转为字符串判断是否包含7
- 满足任一条件就计数加1
- 遍历1到
代码
#include <iostream>
#include <string>
using namespace std;
bool containsSeven(int num) {
string str = to_string(num);
return str.find('7') != string::npos;
}
int main() {
int n;
while (cin >> n) {
int count = 0;
for (int i = 1; i <= n; i++) {
if (i % 7 == 0 || containsSeven(i)) {
count++;
}
}
cout << count << endl;
}
return 0;
}
import java.util.Scanner;
public class Main {
private static boolean containsSeven(int num) {
return String.valueOf(num).contains("7");
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int count = 0;
for (int i = 1; i <= n; i++) {
if (i % 7 == 0 || containsSeven(i)) {
count++;
}
}
System.out.println(count);
}
}
}
def contains_seven(num):
return '7' in str(num)
while True:
try:
n = int(input())
count = 0
for i in range(1, n + 1):
if i % 7 == 0 or contains_seven(i):
count += 1
print(count)
except EOFError:
break
算法及复杂度
- 算法:遍历判断
- 时间复杂度:
- 需要遍历1到
的每个数字,每个数字需要转字符串判断
- 空间复杂度:
- 只使用了常数额外空间