枚举
题目描述
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。请问,在 1 到 n 中,所有这样的数的和是多少?
输入
输入一行包含两个整数 n。
对于 20% 的评测用例,1 ≤ n ≤ 10。
对于 50% 的评测用例,1 ≤ n ≤ 100。
对于 80% 的评测用例,1 ≤ n ≤ 1000。
对于 所有 的评测用例,1 ≤ n ≤ 10000。
输出
输出一行,包含一个整数,表示满足条件的数的和
样例输入
40
样例输出
574
#include <stdio.h>
int main()
{
int n,j,k,s=0;
int i=0;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
j=i;//28
while(j)
{
k=j%10;//8,2
if(k==2 || k==0 || k==1 || k==9)
{
s=s+i;
break;
}
j=j/10;//2
}
}
printf("%d",s);
}
【补充】题2 输出梯形
模拟
#include <iostream>
//创建二维数组 固定大小 太大为全局数组 arr[1000][3000]
// 图形范围 根据图形规律给出 高为h,底为3h-2 即arr[h-1][3h-3]
char arr[1000][3000];
int main() {
int h;
while(scanf("%d",&h)!=EOF){
//全打印空格
for(int i=0;i<h;++i){
for(int j=0;j<3*h-2;++j){
arr[i][j]=' ';
}
}
//打印星号
int beg=0;//beg为变量
for(int i=h-1;i>=0;--i){
for(int j=beg;j<3*h-2;++j){
arr[i][j]='*';
}
beg=beg+2;
}
for(int i=0;i<h;++i){
printf("%s\n",arr[i]);
}
}
}