C语言/C++常见习题问答集锦(二十四)
程序之美
1、编写一个函数判断一个整数是否左右对称数,
要求函数为:fun(long n)
要求在主程序中输入一个整数,如果该数对称,输出“YES”否则输出“NO”
int fun(long n)
{int result = -1;long t,s=0;t=n;while(t){s=s*10+t%10;t/=10;}if(s==n)printf("YES\n");elseprintf("NO\n");return result;
}
2、从键盘输入20个整数存入数组,分别编写求数组的最大值、最小值和平均值得函数,主函数实现数据的输入、调用函数分别输出最大值、最小值和平均值。
#include<stdio.h>int maxValue(int* arr, int len){if(arr == null){return -1;}int max = arr[0];int len = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < len; i++){if (max < arr[i]){max = arr[i];}}return max;
}int minValue(int* arr, int len){if(arr == null){return -1;}int min = arr[0];int len = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < len; i++){if (min > arr[i]){min = arr[i];}}return min;
}float average(int* arr){if(arr == null){return 0.0;}float varAge = 0.0;int sum = 0;int len = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < len; i++){sum += arr[i]}varAge = (float)sum/len;return varAge;
}int main()
{int arr[20] = {0};int i = 0;int max = 0;int min = 0;float aver = 0.0;printf("请输入20个整数:");for (i = 0; i < sizeof(arr)/ sizeof(arr[0]); i++){scanf("%d",&arr[i]);}max = maxValue(arr);min = minValue(arr);aver = average(arr);printf("max=%d\n", max);printf("min=%d\n", min);printf("aver=%f\n", aver);return 0;}
3、已知 有微生物 x,y;
X出生后每隔3分钟分裂一次(数目加倍)
Y出生后每隔2分钟分裂一次(数目加倍)
一个新出生的X,半分钟之后吃掉1个Y,且从此开始每隔1分钟吃掉1个Y
已知新出生的X=10,Y=89,求60分钟后Y的数目。若X=10,Y=90呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。
#include<stdio.h>int main()
{int x=10,y=90;for(int i=1;i<=120;i++) //将时间的单位往后延顺到120个单位 {if(i%2==1)//按照题目的条件,正好逢奇数x吃y y=y-x;if(i%4==0)//变成4分钟 y=y*2;if(i%6==0)//变成6分钟 x=x*2;}printf("%d",y);return 0;
}
答案:
0
94371840
对于这道题目有很多朋友纠结,请问为什么可以忽略新生和不新生的问题。其实这里并没有忽略,而是还了一个思路,不要总纠结于新生不新生,而是把生物当成一个个体来看到,如上所述,将60分钟平均分成了120个单位,那么就是说对于这个生物,1单位,吃Y,3单位吃Y,5单位吃Y。。。。。,每逢奇数单位吃Y,所以就合并成如下:
if(i%2==1)//按照题目的条件,正好逢奇数x吃yy=y-x;
好好整理下思路。