欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《算法竞赛入门经典》第三章思考题

程序员文章站 2022-06-02 22:14:34
...

参考:https://blog.csdn.net/Artprog/article/details/54791429

《算法竞赛入门经典》第三章思考题

第一小题:略

第二小题: 输入一些数,求最大值、最小值和平均数

本题关键是first的设置,使max,min只赋值一次,后置0
我用的是windows64位操作系统,按Ctrl+D回车结束输入

#include <iostream>
using namespace std;
int main() 
{
	int n,max,min,sum=0,cnt=0,first=1;
	double mean = 0;
	while (scanf("%d\n",&n)==1)
	{
		if (first)
		{
			max = min = n;
			first = 0;
		}
		if (n > max) 
		{
			max = n;
		}
		if (n<min)
		{
			min = n;
		}
		sum += n;
		++cnt;
	}
	mean = sum * 1.0 / cnt;
	cout << "最大值:" << max << " " << "最小值:" << min << " " << "平均值:" << mean << endl;
	//system("pause");
	return 0;
}

第三小题:输入一些数,哪两个数最接近。

这道题,关键是for循环的设置,因为是一维数组,也要用两重循环去遍历,第一个for循环是遍历到 <lenght(array)-1(倒数第二个元素)就停止了,而第二次for是遍历到<lenght(array)(最后一个元素才停止)

#include <iostream>
#include<algorithm>
using namespace std;
int main() 
{
	int array[100], i, j, len = 0;
	while (scanf("%d",&array[len])==1)
	{
		++len;
	}
	int a, b;
	int distance = abs(array[0]-array[1]);
	for (i = 0; i < len-1; i++)
	{
		for (j = i + 1; j < len; j++)
		{
			if (abs(array[i]-array[j])<distance)
			{
				a = array[i];
				b = array[j];
				distance = abs(array[i] - array[j]);
			}
		}
	}
	cout << "这两个数是:" << a << " " << b << ",接近值为:" << distance << endl;
	//system("pause");
	return 0;
}