问题标题: 酷町堂:3887 排名统计为什么20分??

0
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
我要回答