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

牛客网三道编程题(六) 之华为机试在线训练(五)对随机数字去重、排序;取近似值

程序员文章站 2022-04-04 11:20:40
...

1、对随机数字去重、排序

      这道题我做的是对的。但是编译器显示有个结果输错了。我在VS2013下,把61个数据输送了一遍,显示的结果是正确的。我也就呵呵了。

牛客网三道编程题(六) 之华为机试在线训练(五)对随机数字去重、排序;取近似值

我的程序是这样的:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;
 bool comp(const int &s1, const int &s2)  // 和sort()函数搭配使用
  {
	return s1 < s2;
  }
int main()
{
	int num_total,num;
	int a[1000] = {0};// 注意:此时的下标索引不再仅仅是0~9的数字了,而是一个数,可能很大
	cin >> num_total;
	vector<int> veci;
	while (cin >> num)
	{
		a[num]++;
		if (a[num] == 1)
		{
			veci.push_back(num);
		}
	}
	sort(veci.begin(), veci.end(), comp);
	for (decltype(veci.size()) i = 0; i < veci.size(); i++)
	{
		cout << veci[i] << endl;
	}
	return 0;
}

显示的错误是这样的:

测试用例:
61
25
29
105
52
108
73
58
38
64
14
55
98
94
102
35
60
68
15
27
103
73
55
35
33
47
35
16
31
108
46
65
89
13
51
51
99
113
66
111
99
64
54
117
20
14
106
9
29
11
25
100
58
79
69
84
106
59
92
42
11
92

对应输出应该为:

9
11
13
14
15
16
20
25
27
29
31
33
35
38
42
46
47
51
52
54
55
58
59
60
64
65
66
68
69
73
79
84
89
92
94
98
99
100
102
103
105
106
108
111
113
117

你的输出为:

1

我在我的编译器上把 61 个数据输进去,显示的结果并不是1,而是正确结果。如下图所示:

输入的数字:

牛客网三道编程题(六) 之华为机试在线训练(五)对随机数字去重、排序;取近似值

牛客网三道编程题(六) 之华为机试在线训练(五)对随机数字去重、排序;取近似值


输出的结果:

牛客网三道编程题(六) 之华为机试在线训练(五)对随机数字去重、排序;取近似值

牛客网三道编程题(六) 之华为机试在线训练(五)对随机数字去重、排序;取近似值

2、取近似值

      这道题实在简单,本没有发布在博客上的必要,但既然是刷题,就发吧。

牛客网三道编程题(六) 之华为机试在线训练(五)对随机数字去重、排序;取近似值

程序如下:

#include<iostream>
using namespace std;

int main()
{
	float n;
	cin >> n;
	if ((n - (int)n) >= 0.5)
	{
		cout << (int)n + 1;
	}
	else
	{
		cout << (int)n;
	}
	return 0;
}

还有一种更更简单的解法:

#include <iostream>
using namespace std;
int main()
{
float a;
cin>>a;
cout<<int(a+0.5);
return 0;