0
已解决
刘承志
中级光能
中级光能
题目描述 Description
某家公司最近打算统计一下客户的年均开支,他们根据降序整理每个人的开支。整理完n个人数据之后,发现有m个人的数据忘记统计了。现在准备重新统计所有人的数据,方便后面的查询。现在请你设计程序,重新整理这些数据,并输出排名第x的开支。
输入描述 Input Description
输入为两行:
第一行为正整数n、m、x,分别表示已整理的人数、忘记的人数、以及第x名的开支(0 < x ≤ n ≤ 40000,0 ≤ m≤ 500,);
第二行为n个整数,分别表示n个人的开支,从大到小(0~100000)。
第三行为m个整数,分别表示忘记统计的m个人的开支(0~100000)。
输出描述 Output Description
输出一个整数,表示正确整理后第x名的开支。
样例输入 Sample Input
10 2 5
12000 9000 8000 7000 6000 5500 4400 4000 3600 3400
50000 5600
样例输出 Sample Output
7000
20分代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[40666];
int main()
{
int n,m,x;
cin>>n>>m>>x;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=n+1;i<=n+m;i++){
cin>>a[i];
}
int j,war;
for(int i=n;i<=n+m;i++){
war=a[i];
j=i-1;
while(j>=1&&war<a[j]){
a[j+1]=a[j];
j--;
}
a[j+1]=war;
}
cout<<a[x];
return 0;
}
刘承志在2020-02-21 12:12:54追加了内容
我已AC,现在我采纳第一个人
0
0
李素妍
新手天翼
新手天翼
int a[40510];
int main(){
整形 n,m,k,j,x;
输入>>n>>m>>x;
循环(int i=1;i<=n+m;i++) cin>>a[i];
循环(int i=n+1;i<=n+m;i++){
k=a[i];
j=i-1;
while(j>=1 && k>a[j]){
a[j+1]=a[j];
j--;
}
a[j+1]=k;
}
输出<<a[x];
return 0;
}
李素妍在2020-02-21 12:34:50追加了内容
请采纳!
0
0
0
0
吴君昊
新手光能
新手光能
你的代码错误:
你不应该输入两个,建议你最好定义两个数组,第二个循环for(int i=n+1;i<=n+m;i++){下划线这里错了改成:
for(int i=1;i<=m;i++)
你的整体思路是对的,下面是我的代码核心:
别忘了定义!!
祝你AC
0
董宇昊
初级启示者
初级启示者
hi,刘班长! 核心部分+注释,望采纳,谢谢!! for(int i=2;i<=n+m;i++){ //把第2~n个元素依次插到合适的位置 int key=a[i]; //把要插入的元素储存起来 int j=i-1; //从a[i]前一个元素开始比较 while(j>=1 && key>a[j]){//往前找,直到比较到一个元素或某一个元素比a[i]小就停止 a[j+1]=a[j]; //a[j]往后挪一位 j--; //继续往前找 } a[j+1]=key; //把a[i]的值插到合适的位置 }
0