c语言一道编程题,求大神给看哪错了

问题描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。

输入格式
第一行包含一个数n,表示序列长度。

第二行包含n个正整数,表示给定的序列。

第三个包含一个正整数m,表示询问个数。

接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。

输出格式
总共输出m行,每行一个数,表示询问的答案。
样例输入
5
1 2 3 4 5
2
1 5 2
2 3 2
样例输出
4
2
数据规模与约定
对于30%的数据,n,m<=100;

对于100%的数据,n,m<=1000;

保证k<=(r-l+1),序列中的数<=106。

#include<stdio.h>
main()
{
int i,n,m,t,z,r,k,l,f,a[100],b[100][3];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(i=0;i<m;i++)
scanf("%d%d%d",&b[i][0],&b[i][1],&b[i][2]);
for(i=0;i<m;i++){
l=b[i][0];r=b[i][1];k=b[i][2];
for(t=l-1;t<r-1;t++)
for(z=t+1;z<r;z++)if(a[t]<a[z]){
f=a[t];a[t]=a[z];a[z]=f;}printf("%d\n",a[l+k-2]);}
return 0;
}

    一定是错误:你在排序之后,并没有把数组还原,导致第一组数据正确后,第二组数据面临的不是原来的数组。样例中,当第一组数据排序结束后,数组由“12345”变为了“54321”,等你第二组数据要计算的时候,原本你应该计算“23”,结果你计算了“43”,自然有问题。

    不确定是否错误,但是ACM的题目中出现多组数据的时候,通常都是输入一组数据,输出一组数据。如果把所有的输入都存起来,等输入完毕后一起输出,会导致格式出错。

    也不确定是否错误,你在用冒泡排序对数组进行操作。在ACM题目中,通常情况下冒泡排序都是超时的排序方式。以这道题目而言,排序是可以优化的,比如,我只排前k个数据,找出第k大的数之后直接输出。又或者用其他的优化排序法(同样考虑只排序到第k个)

追问

那如果按这道题目来说,该怎样实现呢

温馨提示:内容为网友见解,仅供参考
无其他回答

一道c语言编程题求大神解答,找一下我错在哪了,谢谢了?
没有语法错误,只能说明在格式上没有找到错误,还不一定是正确的,更不要说能够正确执行了。没有语法错误,有三种可能:1、格式没问题,但算法错误;2、格式没问题,但不符合要求,导致计算结果错误;3、格式没问题,且算法没问题,能够计算出正确结果。只有符合第3种情况,才是正确的程序。

c语言编程题,看一下哪里错了。
num还没初始化,就调用int guess(int num),肯定错了。

C语言的一道题 我不知道错哪了 要怎么改。 跪请大神指点,别把百度上的...
include<stdio.h>void main(void){double a,b,c;printf("请输入三边");scanf("%lf,%lf,%lf",&a,&b,&c);\/\/去掉\\n,你设置了输入格式,所以正确的输入格式是:以逗号隔开输入的数据if(a+b>c&&a+c>b&&b+c>a){if(a==b&&b==c)printf("等边三角形");else if(a*a+b*b==c*...

c语言求两个整数的和、乘积、差、商 麻烦大神帮我看一下哪错了 谢谢
错误比较多。1、scanf,括号中不能乱加空格,%f %f,无法正确读取a、b 2、既然是整数a、b,那么也不应该用%f 3、scanf下面的四行都没有加分号 4、如果按题意a、b是整数,那么对于s=a\/b,需要转为float

C语言编程,求大神帮忙看看哪里错了 int main() { int a=1;b=2;c;
把int语句中前两个分号改成逗号。int main(){ int a=1,b=2,c;if (a<b)c=b;if (b

刚学c语言,请大神看一下,哪里错了
你好,代码没有错,只是你在输入重力时,输入的格式没有按要求来输入重力g,正确的输入g应该是这样的,请看下图。希望能帮到你。

C语言编程,求3到n的所有素数的平方根之和,大神看看我哪里错了
你的第2个for循环的自增写错了。应该自增1,即j++。j初始值应该是2.第2个for循环的作用是检测i是否能被1到i的平方根之间的整数整除,如果有1个能整除,就不是素数,所以从2开始,每一个数都需要检测,所以j每次增加1,不是增加2.第2个if条件写错了,应该是j>sqrt(i)完整fun函数代码如下,...

一道从小到大排序的c语言编程题,用的是选择排序法,输出结果不对,但是...
这是我的选择排序法:include<stdio.h>void xuanze(int *a,int len);#define size 10int main(){int shuzu[10],i;printf("请输入10个整数:\\n");for(i=0;i<size;i++){scanf("%d",&shuzu[i]);}xuanze(shuzu,size);printf("排序后:\\n");for(i=0;i<size;i++){printf("%5d...

各位c语言大神看一下,一元二次方程编程哪里错了
第10行printf函数多了个%f,两个你写了三个。

C语言开关灯问题,麻烦大神们帮我看看这个程序哪里错了啊,结果不对...
两个错误:1、int a[6000]={1};这句。你这只是将a[0]赋值1,其他都是0,数组默认以0填充,应该改为:int a[6000];for(i=0;i<6000;i++)a[i]=1;2、第二层循环里:if(a[j]==0)a[j]=1;if(a[j]==1)a[j]=0;这个语句把所有的灯都关闭了,因为如果关了,就打开;打开后又...

相似回答