ACM第二次WXYZ

W - 海选女主角
potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口。
“做什么比较挣钱呢?筛沙子没力气,看大门又不够帅…”potato老师很是无奈。
“张艺谋比你还难看,现在多有钱呀,听说还要导演奥运开幕式呢!你为什么不去娱乐圈发展呢?”lwg在一旁出主意。
嗯,也是,为了生存,就委屈点到娱乐圈混混吧,马上就拍一部激光电影《杭电记忆——回来我的爱》。
说干就干,马上海选女主角(和老谋子学的,此举可以吸引媒体的眼球,呵呵),并且特别规定,演员必须具有ac的基本功,否则直接out!
由于策划师风之鱼(大师级水王)宣传到位,来应聘的MM很多,当然包括nit的蛋糕妹妹等呼声很高的美女,就连zjut的jqw都男扮女装来应聘(还好被安全顾问hdu_Bin-Laden认出,给轰走了),看来娱乐圈比acm还吸引人哪…
面试那天,刚好来了m*n个MM,站成一个m*n的队列,副导演Fe(OH)2为每个MM打了分数,分数都是32位有符号整数。
一开始我很纳闷:分数怎么还有负的?Fe(OH)2解释说,根据选拔规则,头发染成黄色、化妆太浓、穿的太少等等都要扣分数的,扣的多了就可能是负分了,当然,如果发现话语中夹有日语,就直接给-2147483648分了。
分数送上来了,是我做决定的时候了,我的一个选拔原则是,要选一个面试分数绝对值(必须还是32位整数)最大的MM。
特别说明:如果不幸选中一个负分的MM,也没关系,因为我觉得,如果不能吸引你,那要想法恶心你。
Input
输入数据有多组,每组的第一行是两个整数m和n,表示应聘MM的总共的行列数,然后是m行整数,每行有n个,m和n的定义见题目的描述。
Output
对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。
note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。
Sample Input
2 3
1 4 -3
-7 3 0
Sample Output
2 1 -7

#include <stdio.h>  
int abs(int x){  
    return x>0 ? x : -x;  
}  
int main(){  
    int n, m, i, j, t, t_v, max, max_v, max_i, max_j;  
    while ( ~scanf("%d%d", &n, &m) ){  
        max = -1;  
        for ( i=0; i<n; ++i ){  
            for ( j=0; j<m; ++j ){  
                scanf("%d", &t_v);  
                t = abs(t_v);  
                if ( t > max ){  
                    max = t;  
                    max_v = t_v;  
                    max_i = i;  
                    max_j = j;  
                }  
            }  
        }  
        printf("%d %d %d\n", max_i+1, max_j+1, max_v);  
    }  
    return 0;  
}  

X - 求平均成绩
假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。
Input
输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。
Output
对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。
每个测试实例后面跟一个空行。
Sample Input
2 2
5 10
10 20
Sample Output
7.50 15.00
7.50 15.00
1

#include<stdio.h>  
#include<string.h>  
double student[55],subject[9];  
double score[55][9];//二维数组,每行存的每个学生的分数,每列为每门课的分数   
int main()  
{  
    int n,m,i,j;  
    while(scanf("%d%d",&n,&m)!=EOF)  
    {  
        for( i=0;i<n;i++)  
            for( j=0;j<m;j++)  
                scanf("%lf",&score[i][j]);  
        double sumstu,sumsub;  
        for( i=0;i<n;i++)  
        {  
            sumstu=sumsub=0;  
            for(j=0;j<m;j++)  
            {  
                sumstu+=score[i][j];//每个学生的总分   
//              sumsub+=score[j][i];  
            }  
            student[i]=sumstu/m;//每个学生的平均分   
//          subject[i]=sumsub/(n*1.0);  
        }  
        for( i=0;i<m;i++)  
        {  
            sumsub=0;  
            for( j=0;j<n;j++)  
                sumsub+=score[j][i];//每门课总分   
            subject[i]=sumsub/n;//每门课平均分   
        }  
        int sum=0,flag;  
        for( i=0;i<n;i++)  
        {  
            flag=0;  
            for( j=0;j<m;j++)  
            {                 
                if(score[i][j]<subject[j])//若有一门分数小于该科目平均分,则不满足   
                {  
                    flag=1;  
                    break;  
                }  
            }  
            if(flag==0)  
                sum++;  
        }  
        for(i=0;i<n-1;i++)  
            printf("%.2lf ",student[i]);  
        printf("%.2lf\n",student[n-1]);  
        for(i=0;i<m-1;i++)  
            printf("%.2lf ",subject[i]);  
        printf("%.2lf\n",subject[m-1]);  
        printf("%d\n\n",sum);  
    }  
    return 0;  
}  

Y - C语言合法标识符
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出”yes”,否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char a[50]; 
    int n,i,l,p; 
    scanf("%d",&n); 
    getchar(); 
    while(n--) 
    {
        p=0; 
        gets(a); 
        l=strlen(a);
        if(a[0]<='z'&&a[0]>='a'||a[0]<='Z'&&a[0]>='A'||a[0]=='_')
        {
            for(i=1;i<l;i++)
            {
                if(a[i]<='z'&&a[i]>='a'||a[i]<='Z'
                &&a[i]>='A'||a[i]=='_'||a[i]<='9'&&a[i]>='0') 
                    continue;
                else 
                {
                    p=1; 
                    break;
                } 
            } 
        } 
        else
            p=1;
       if(p)
            printf("no\n");
       else 
       printf("yes\n");
   } 
   return 0;
 } 

Z - 查找最大元素
对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。
Input
输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。
Output
对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入”(max)”。
Sample Input
abcdefgfedcba
xxxxx
Sample Output
abcdefg(max)fedcba
x(max)x(max)x(max)x(max)x(max)

#include <iostream>  
#include <string>  
using namespace std;  

int main()  
{  
    string s;  
    while(cin>>s)  
    {  
        char max=s[0];  
        for(int i=1;i<s.length();i++)  
            if(max<s[i])  
            max=s[i];//max代表最大元素  
        for( i=0;i<s.length();i++)  
        {  
            cout<<s[i];  
            if(s[i]==max)//遍历字符串,遇到最大元素时  
                cout<<"(max)";  
        }  
        cout<<endl;  
    }  
    return 0;  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值