注册 登录
编程论坛 C语言论坛

小白在线求解答

bruru 发布于 2022-11-15 21:56, 811 次点击
Description
最近acm队决定对近期举行的n场比赛做一总结,以研究哪几场比赛题目难度分配正常,但苦于任务艰巨没人想做,所以就找上你啦~~~

Input
 第一行为一个正整数n(0<n<100),接下来有n行。对于每一行有9个整数,第一个整数为比赛序号,接下来八个代表第1~8题的成功解题人数。

Output
输出难度分配最简单的比赛的序号。若题号越小的题目解出的人数越多,则该比赛越简单。(当然和现实的acm赛有区别)

Samples
input
5
1 200 300 400 500 600 700 800 900
2 900 900 800 700 600 400 200 100
3 900 800 700 600 500 400 300 200
4 800 800 800 800 800 800 800 800
5 1 2 3 4 5 6 7 8
output
2
Hint
1. 以样例为例

先看第一题,做出来最多的是2、3号比赛

继续看第二题,2号做出来的比3号多

所以答案是2号

2. 序号不一定是连续的,可以是任何int类型的整数


#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    struct{
        int a;
        int b[8];
    }m[n*2+1];
    for(int i=0;i<n;i++){
        scanf("%d %d %d %d %d %d %d %d %d",&m[i].a,&m[i].b[0],&m[i].b[1],&m[i].b[2],&m[i].b[3],&m[i].b[4],&m[i].b[5],&m[i].b[6],&m[i].b[7]);
    }
    int x=0;
    int z=0;
    for(int k=0;k<8;k++){
        for(int i=0;i<n-1;i++){
            for(int j=0;j<n-i-1;j++){
                if(m[j].b[z]<m[j+1].b[z]){
                    m[2*n]=m[j+1];
                    m[j+1]=m[j];
                    m[j]=m[2*n];
                }
            }
        }//第z题的人数降序排列
        if(m[0].b[z]>m[1].b[z]){
            printf("%d\n",m[0].a);
            break;
        }//如果只有一个最大  输出
        else {
            for(int h=0;h<n;h++){
                if(m[h].b[z]!=m[z].b[z]) {
                    m[h].b[z+1]=-1;
                }
            }
            z++;
        }//让z题不是最大的结构的z+1题人数变为-1
    }
    return 0;
}
8 回复
#2
forever742022-11-15 22:36
楼主的帖子当作答完题的总结也是可以的。

所以,你的问题呢?
#3
bruru2022-11-15 22:44
回复 2楼 forever74
阿这
我测试了用例是感觉没啥错误
但是提交错误,我不知道哪里有问题
#4
rjsp2022-11-15 23:08
如果最小的不止一个怎么办?

BTW: 代码太复杂了。这题就是求数组的最小值,只不过这个数组的元素本身又是一个数组而已。
#5
bruru2022-11-16 07:31
回复 4楼 rjsp
求最大的,如果不止一个最大,就z+1查下一题,我不会写比较简单的
#6
rjsp2022-11-16 08:38
以下是引用bruru在2022-11-16 07:31:10的发言:

求最大的,如果不止一个最大,就z+1查下一题,我不会写比较简单的

我的意思是,如果都最大怎么办?比如输入

5
1 200 300 400 500 600 700 800 900
2 200 300 400 500 600 700 800 900
3 200 300 400 500 600 700 800 900
4 200 300 400 500 600 700 800 900
5 200 300 400 500 600 700 800 900

那是输出最先的 1 呢,还是最后的 5 呢,还是所有的 1、2、3、4、5 呢?还是随便选一个,比如 3 呢?
#7
forever742022-11-16 08:40
回复 3楼 bruru
您还是没说是什么错误,
是编译错误还是运行错误,还是多个用例有的对有的错。

如果是编译错误的话,建议您像我一样严格遵守ANSI C规范,
每个作用域开头声明本域变量,一旦有了非声明语句,就不再声明变量了,不在for的圆括号内声明变量;
数组大小用常量声明,不用变量。

我认为ANSI风格能平趟的编译环境分布得更广泛。
#8
bruru2022-11-16 12:33
回复 6楼 rjsp
这个我没考虑
我改过了,通过了,看样子是不用考虑的
还是考虑不周全
#9
bruru2022-11-16 12:34
回复 7楼 forever74
好的
现在问题已经解决了
谢谢您的建议,会继续加油的
1