zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言/C++常见习题问答集锦(二十四)

C++C语言 常见 习题 集锦 问答 二十四
2023-09-14 09:01:32 时间

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");
	else
		printf("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吃y
              y=y-x;

好好整理下思路。
在这里插入图片描述