A
题意:F(x)的作用是让x+1,如果最后一位是零将零去掉,求不同F(n)的个数;
解题思路:当n只有一位时F(n)的个数一定是9,然后每一位单独处理,不同的个数有10-n%10;
代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
long long n,flag=0;
while(~scanf("%lld",&n))
{
if(n%10==0)
{
flag++;
n++;
}
while(1)
{
if(n<10)
break;
long long x=n%10;
if(x==0)
{
n/=10;
continue;
}
flag+=10-x;
n=n/10+1;
}
printf("%lld
",flag+9);
}
return 0;
}
B
题意:给一串数字,可以根据下一行它的地址对应的数字对其进行修改,每个数字只能修改一次,输出修改后的最大值
解题思路:从左向右依次开始找,如果f(x)>x就改变,否则不变
代码:
C
题意:给n个数,每个数都可以进行两个操作,操作1:x+2/x-2,操作2:x+1/x-1,操作1免费,操作2花费1,求让所有数字相同的最小花费
解题思路:直接统计奇数偶数的个数,输出最小值
代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int n,a[1000],i,b=0,c=0;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
if(a[i]%2==0)
b++;
else
c++;
}
if(b<=c)
printf("%d",b);
else
printf("%d",c);
}
}
D
题意:求bad day的天数
解题思路:从后往前,大雨后面值的个数
代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int t,n,a[150000],flag,b,i,j,x;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
b=a[n];
flag=0;
for(i=n-1;i>=1;i--)
{
if(a[i]>b)
flag++;
else
{
b=a[i];
}
}
printf("%d
",flag);
}
}
E