做不出来
#include <iostream>
using namespace std;
int n, x, ansal;
int pd(int x) {
int k = x;
while (k > 0) {
if (k % 10 == 7) {
return false;
}
k = k / 10;
}
return x;
}
int main() {
ios::sync_with_stdio(false);//关闭同步不解释
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x;
ansal = x;
for (int j = 1; j <= x; j++)
if (!pd(j))
ansal--;
cout << ansal << '\n';
}
return 0;
}
做不出来
#include <bits/stdc++.h>
using namespace std;
int sum, x, ans;
int pd(int x) {
int k = x;
while (k > 0) {
if (k % 10 == 7) {
return false;
}
k = k / 10;
}
return x;
}
int main () {
cin >> sum;
for (int i = 0; i < sum; i++) {
cin >> x;
int t = x;
for (int j = 0; j <= t; j++) {
if (pd(j) == j) {
ans++;
}
}
cout << ans << endl;
ans = 0;
}
return 0;
}
所以没办法了,只能用规律了,
#include <iostream>
#include <cstring>
using namespace std;
long long k, s = 1, sum = 0, ans = 0;
int t, i, j;
char a[1001];
int main() {
cin >> t;
while (t--) {
ans = sum = 0;
s = 1;
cin >> a;
k = strlen(a);
//以下若干行是特判QWQ
for (i = 0; i < k; ++i)
/*
如果有数位是7
such as 700
其运行结果和699 完全一致
5789898984 和 5699999999 运行结果完全一致
(因为如果一个数字中有一个数位为7,它就不是Pascal数了啊)
把这个数扫一遍,所以如果发现7,就把以后的全部内容替换为6999...
*/
if (a[i] == '7') {
a[i] = '6';
for (j = i + 1; j < k; ++j)
a[j] = '9';
break;
}
for (i = k - 1; i >= 0; --i)
/*
如果一个数的个位是8或9,就少减了2^0个7
如果一个数的十位是8或9,就少减了2^1个7
如果一个数的百位是8或9,就少减了2^2个7
...以此类推
是个找规律,不想写证明QWQ
*/
{
if (a[i] > '7')
sum += s;
s *= 9;
}
for (i = 0; i < k; ++i) {
ans = ans * 9 + a[i] - '0';
}
cout << ans - sum << endl;
}
}