试题C:好数
题目描述
一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位 · · · )上的数字是奇数,偶数位(十位、千位、十万位 · · · )上的数字是偶数,我们就称之为“好数”。
给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。
输入格式
一个整数 N。
输出格式
一个整数代表答案。
样例输入1
24
样例输出1
7
样例输入2
2024
样例输出2
150
样例说明
对于第一个样例,24 以内的好数有 1、3、5、7、9、21、23,一共 7 个。
评测用例规模与约定
对于 10% 的评测用例,1 ≤ N ≤ 100。
对于 100% 的评测用例,1 ≤ N ≤ 107。
暴力枚举,没啥好说的,时间复杂度是$O(7n)$
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
const int N = 1e7 + 10;
int main()
{
int n;
cin >> n;
int res = 0;
for(int i = 1; i <= n; i ++)
{
int tmp = i;
int x;
int cnt = 1;
bool ok = true;
while(tmp)
{
x = tmp % 10;
if(cnt % 2 != x % 2) {ok = false; break;}
tmp /= 10;
cnt ++;
}
if(ok) res ++;
}
cout << res << endl;
return 0;
}
你的if(cnt % 2 != tmp % 2)这一行当中的tmp%2好像应该写成x%2吧,否则x就起不到作用了》-《
哈哈是的,已经修改了,谢谢提醒。 不过if(cnt % 2 != tmp % 2)也能过。