先积累硬实力,再积累软实力,最后积累巧实力,而C语言是嵌入式技术的硬实力之一。
学技术,重在日拱一卒、一点一滴的积累。
今天一起分析C语言的算法练习之一,计算美女的年龄。
以下内容,只代表个人观点,不一定对,仅供参考,随便看看。
题目:已知一位美女的年龄的3次方是四位数,四次方是六位数,并且她岁数的3次方和4次方刚好用遍了0~9十个数字。
假设美女的年龄为A,那么以下四个条件必须同时成立:
条件1:999<A*A*A<10000
条件2:99999<A*A*A*A<1000 000
条件3:计算A*A*A和A*A*A*A两个数对应每一位分别是0-9的每个数字。
3.1将A*A*A和A*A*A*A的结果的每一位分离,并将每位数存入数组:unsigned char niu[10];的每一个元素中。
niu[0]=(A*A*A)/1000;
niu[1]=(A*A*A)%1000/100;
niu[2]=(A*A*A)%1000%100/10;
niu[3]=(A*A*A)%1000%100%10;
niu[4]=(A*A*A*A)/100000;
niu[5]=(A*A*A*A)/10000%10;
niu[6]=(A*A*A*A)/1000%10;
niu[7]=(A*A*A*A)/100%10;
niu[8]=(A*A*A*A)/10%10;
niu[9]=(A*A*A*A)%10;
3.2用冒泡算法给数组niu[10];里面每一位数按由低到高进行排序。
3.3然后niu[10];的每个元素和xyd[10]={0,1,2,3,4,5,6,7,8,9};进行逐一比较,如果成立就可以计算出该数字。
条件4:美女年龄范围为:0<A<100。
/*定义全局变量,缺省状态下为0*/
unsigned int my,a,b,i,j,temp;
char flag=0; //定义一标志位
unsigned int niu[10];
unsigned int xyd[10]=
{0,1,2,3,4,5,6,7,8,9};
void main()
{
/*循环找出符合条件的数*/
for(my=0;my<100;my++)
{
/*美女的年龄的三次方是四位数*/
a=my*my*my;
/*美女的年龄的四次方是六位数*/
b=my*my*my*my;
/*美女的年龄的三次方是四位数,首将这四位数分解开来并存到数组里面*/
niu[0]=a/1000;
niu[1]=a/100%10;
niu[2]=a/10%10;
niu[3]=a%10;
/*美女的年龄的四次方是六位数,首将这六位数分解开来并存到数组里面*/
niu[4]=b/100000;
niu[5]=b/10000%10;
niu[6]=b/1000%10;
niu[7]=b/100%10;
niu[8]=b/10%10;
niu[9]=b%10;
/*冒泡排序将最终存到数组里面的数按从小到大的顺序排列*/
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
if(niu[j]>niu[j+1])
{
temp = niu[j+1];
niu[j+1]=niu[j];
niu[j]=temp;
}
}
}
for(i=0;i<10;i++)
{
/*经过刚刚的排序后,判断数组里面存储的是否是从0到9,
依次判断,如果满足条件,则flag=1继续判断,循环10次
结束循环,再判断标志位是否是1,如果是,则打印美女年龄*/
if(niu[i]==xyd[i])
{
flag=1;
continue;
}
else
{
flag=0;
break;
}
}
if(flag==1)
{
/*结果18岁,小姐姐好年轻啊*/
printf("美女今年:%d岁\n",my);
}
}
}
想快速掌握C语言编程,必须要多练习,多编写程序。
|