找满足条件的数的个数问题
我们要求找出具有下列性质数的个数(包含输入的自然数 n)。先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:1.不作任何处理;2.在它的左边加上一个自然数,但该自然数不能超过原数最高位数字的一半;3.加上数后,继续按此规则进行处理,直到不能再加自然数为止。
【输入】 第一行一个数t,表示有t组数据,之后每组数据占一行,每行一个数 n 。
【输出】 每组数据占一行,一个数,表示满足条件的数的个数。
【输入范例】1 6
【输出范例】6
程序代码:
#include<stdio.h>
int main()
{
intn,t,a; //n表示输入的数,t表示有t组数据,a表示满足条件的数的个数
scanf("%d",&t); //输入t
while(t--) //进入循环,可以输入t组数据
{
scanf("%d",&n); //输入n
a=1; //因为满足条件的数中包含该数本身,所以a赋初值为1
while(n-10>=0)
{ /*因为要对根据该数的最高位进行判断,所以,如果该数等于10即为两位数或高位数,则进入循环,取出该数的最高位*/
n=n/10;
}
for(inti=1;i<=n/2;i++) //第一个for循环计算对该数进行第一次处理后满足条件的数的个数
{
a=a+1; //找到一个对a加1
for(intj=1;j<=i/2;j++) //第二个for循环计算对第一次处理后满足条件的数进行第二次处理后满足条件的数的个数
{
a=a+1; //找到一个对a加1
for(intk=1;k<=j/2;k++) //第三个for循环计算对第二次处理后满足条件的数进行第三次处理后满足条件的数的个数
{
a=a+1; //找到一个对a加1
}
}
}
printf("%d\n",a); //输出
}
return0;
}