我们认为一个数是好数,当且仅当它的十进制数位是连号。连号是指,每一个数位都比上一个数位多1。
给定一个正整数 n,请问 [1,n] 中有多少好数?
要判断一个数是否为好数,即其每一位数字比前一位数字大1。首先,所有的1位数(1到9)都是好数。对于多位数,我们可以逐位检查每一位是否比前一位大1。如果满足条件,则该数是好数。
考虑到 n 的范围最大为 105,即最多5位数,枚举所有数字并检查其是否为好数是可行的。
#include <bits/stdc++.h>
using namespace std;
// 判断一个数是否为好数
bool isGoodNumber(int num) {
// 单位数都是好数
if (num < 10) return true;
string s = to_string(num);
for(int i = 1; i < s.size(); ++i){
// 检查当前位是否比前一位大1
if((s[i] - '0') - (s[i-1] - '0') != 1){
return false;
}
}
return true;
}
int main(){
int n;
// 读取输入
cin >> n;
int count = 0;
// 遍历1到n,统计好数的个数
for(int i = 1; i <= n; ++i){
if(isGoodNumber(i)){
count++;
}
}
// 输出结果
cout << count;
return 0;
}
def is_good_number(num):
# 单位数都是好数
if num < 10:
return True
s = str(num)
for i in range(1, len(s)):
# 检查当前位是否比前一位大1
if int(s[i]) - int(s[i-1]) != 1:
return False
return True
def main():
n = int(input())
count = 0
# 遍历1到n,统计好数的个数
for i in range(1, n+1):
if is_good_number(i):
count +=1
print(count)
if __name__ == "__main__":
main()
import java.util.Scanner;
public class Main {
// 判断一个数是否为好数
public static boolean isGoodNumber(int num){
// 单位数都是好数
if(num < 10) return true;
String s = Integer.toString(num);
for(int i =1; i < s.length(); i++){
// 检查当前位是否比前一位大1
if((s.charAt(i) - '0') - (s.charAt(i-1) - '0') !=1){
return false;
}
}
return true;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count =0;
// 遍历1到n,统计好数的个数
for(int i=1;i<=n;i++){
if(isGoodNumber(i)){
count++;
}
}
// 输出结果
System.out.println(count);
}
}
我们认为一个数是好数,当且仅当它的十进制数位是连号。
给定一个正整数n,请问[1,n]中有多少好数?
连号是指,每一个数位都比上一个数位多1。
比如1234是连号,1245不是连号。
输入一个整数n,表示范围。
1≤n≤105
返回答案
输入
20
输出
10
符合条件的有1,2,3,4,5,6,7,8,9,12