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;
}