1、题目名称:最小差值
通过对一个数组去掉最多n个数,使得该数组剩余的数中最大者和最小者之差值为最小。
思路:
程序接受一个输入整数 n,后跟 n 个整数输入。 然后它使用 std::sort() 以非降序对整数进行排序,并找到最大的 n 个数字和最小的 n 个数字之间的最小差值。
该程序使用循环将输入整数读入数组 num,并跟踪读入变量 len 的整数数量。 然后它使用 std::sort() 对数组进行排序,并用一个非常大的值初始化一个变量 min。
接下来,程序使用另一个循环遍历数组 num 并通过从 (len-1)-(n-i)-th 最大数中减去第 i 数字,对于 0 到 n 范围内的每个 i。 如果差值小于 min 的当前值,则使用该差值更新 min。 最后,程序打印 min 的值。
最终,找到整数数组中最大的 n 个数字和最小的 n 个数字之间的最小差值。
# include <iostream>
# include <cstdio>
# include <string>
# include <algorithm>
# include <set>
using namespace std; constexpr auto INF = 0x3f3f3f3f ;
double pi = 3.14 ;
int num[ 100010 ] ; int main ( ) { int n; cin>> n; int i; int len= 0 ; for ( i= 0 ; i< 100000 ; i++ ) { cin>> num[ i] ; if ( num[ i] == 0 ) break ; len++ ; } sort ( num, num+ len) ; int min= INF; for ( i= 0 ; i<= n; i++ ) { int temp= num[ len- 1 - ( n- i) ] - num[ i] ; if ( temp< min) min= temp; } cout<< min<< endl; return 0 ;
}
2、题目名称:风险投资
风险投资是一种感性和理性并存的投资方式,风险投资人一般会对请公允的第三方评估公司对投资对象进行评级,每个风险投资人的风险偏好都不太一样,但是他们的投资原则都一样: 1. 把投资对象编号为1、2、3……n。 2. 对于大于或等于自己的投资评级的投资对象,都会进行投资。 3. 除此以外,还可以从比在已投资对象中编号最小者编号更小的投资对象和比在已投资对象中编号最大者编号更大的投资对象中各随机选一个投资对象进行投资,以对冲过分理性带来的系统性风险。当然,也可以不选。 现在已知投资对象的总数,以及每个风险投资人的投资笔数及进行投资了的投资对象编号。 问题是:根据以上的数据,最少需要为投资对象制定多少个不同的评级级别?(假设所有风险投资人的评级标准是一致的。)
思路
在给定投资对象总数和每个风险投资家已投资的投资对象数量的情况下,找出投资对象应建立的不同评级级别的最小数量。遵循风险投资家的原则 投资于评级大于或等于自身投资等级的标的,也可以随机选择比投资标的中评级最高的投资标的之一来对冲系统性风险。
1. 首先包含必要的库并使用“std”命名空间。
2. 定义了“main”函数,它是程序的入口点。
3. 变量’n’和’m’被声明为整数,分别存储投资对象的总数和风险资本家的数量。
4. 提示用户输入“n”和“m”。
5. 声明一个大小为[m][1000]的二维整型数组’status’,用于存储每个风险投资家已经投资的投资对象。
6. 该程序使用嵌套循环来读取每个风险资本家的输入数据。 外循环迭代风险资本家的数量“m”,内循环迭代每个风险资本家的投资数量。 输入数据存储在“状态”数组中。
7. 整型变量“sum”初始化为 0,用于统计不同的评分级别。
8. 该程序使用嵌套循环来分析每个风险投资家的投资对象。 外循环迭代风险资本家的数量“m”,内循环迭代每个风险资本家的投资数量。
9. 在内循环中,程序检查投资对象数量是否大于当前风险投资家的投资总数。 如果为真,则表示选择该投资对象是为了对冲系统性风险,'sum’加1。
10. 在处理完所有风险投资家及其投资后,'sum’的值被打印为应该为投资对象建立的不同评级级别的最小数量。
11. 程序返回 0 并结束。
请注意,程序假设所有风险投资家都按相同的等级进行评级,并且每个风险投资家的投资对象数量存储在’status[i][0]'中。
# include <iostream>
# include <vector>
# include <string>
# include <algorithm>
using namespace std; int main ( ) { int n, m; cin>> n>> m; int i, j; int status[ m] [ 1000 ] ; for ( i= 0 ; i< m; i++ ) { cin>> status[ i] [ 0 ] ; for ( j= 0 ; j< status[ i] [ 0 ] ; j++ ) { cin>> status[ i] [ j] ; } } int sum= 0 ; for ( i= 0 ; i< m; i++ ) { for ( j= 0 ; j< status[ i] [ 0 ] ; j++ ) { if ( status[ i] [ j] > status[ i] [ 0 ] ) { sum++ ; } } } cout<< sum<< endl; return 0 ;
}