题解
模拟题,细致考虑各种情况。
代码
#include<iostream>
using namespace std;
int main ()
{
int n;
int sum=0;
//0-9
int one[10]={0,3,3,5,4,4,3,5,5,4};
//10-19
int two[10]={3,6,6,8,8,7,7,9,8,8};
//0,0,20,30...90
int third[10]={0,0,6,6,5,5,5,7,6,6};
//0,100,200,300,400,500...900
int four[10]={0,3+7,3+7,5+7,4+7,4+7,3+7,5+7,5+7,4+7};
//输入n
scanf("%d",&n);
//每位数字
for(int i=1;i<=n;i++)
{
if(i==1000)
{
sum+=11;
break;
}
//数字拆解
//百位数
int bai = i/100;
//十位数
int shi = (i%100)/10;
//个位数
int ge = i%10;
//十位数
if(shi==1)
{
//1x
sum+=two[ge];
}
if(shi!=0&&shi!=1)
{
//个位数直接加
sum=sum+one[ge];
//其他
sum=sum+third[shi];
}
if(shi==0)
{
//个位数直接加
sum=sum+one[ge];
}
//百位
sum=sum+four[bai];
//特殊
//三位数且不是整百---'and'
if(bai!=0&&(i%100)!=0)
sum+=3;
}
printf("%d",sum);
return 0;
}
备注
今天学了插入排序(快把所以排序学完啊啊啊)