/*题号:1041. 考试座位号(15)
*作者:钱金柱
*日期:2018年4月26日 22:35
*题目描述:输入格式:
输入第一行给出一个正整数N(<=1000),随后N行,每行给出一个考生的信息:“准考证号 试机座位号 考试座位号”。
其中准考证号由14位数字组成,座位从1到N编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分
配到同一个座位上。考生信息之后,给出一个正整数M(<=N),随后一行中给出M个待查询的试机座位号码,以空格分隔。
输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用1个空格分隔。
输入样例:
4
10120150912233 2 4
10120150912119 4 1
10120150912126 1 3
10120150912002 3 2
2
3 4
输出样例:
10120150912002 2
10120150912119 1
*/
#include <stdio.h>
struct info
{
char id[15];
int w_num;
int t_num;
};
int main(void)
{
int i, j;
int N;
scanf("%d", &N);
struct info students[N];
for(i = 0; i < N; i++)
{
scanf("%s %d %d", &students[i].id, &students[i].w_num, &students[i].t_num);
}
int M;
scanf("%d", &M);
int a[M];
for(j = 0; j < M; j++)
{
scanf("%d ", &a[j]);
}
for(j = 0; j < M; j++)
{
for(i = 0; i < N; i++)
{
if(a[j] == students[i].w_num)
printf("%s %d\n", students[i].id, students[i].t_num);
}
}
return 0;
}
#include<stdio.h>
struct Student{
char name[15];
char num[15];
int grade;
}temp,max,min;
int main(){
int n;
max.grade=-1;
min.grade=101;
scanf("%d",&n);
while(n--){
scanf("%s%s%d",temp.name,temp.num,&temp.grade);
if(temp.grade>max.grade) max=temp;
if(temp.grade<min.grade) min=temp;
}
printf("%s %s\n",max.name,max.num);//按坐标输出学生姓名学号
printf("%s %s\n",min.name,min.num);
return 0;
}
/*题号:1032 挖掘机技术哪家强(20)(20 point(s))
*作者:钱金柱
*日期:2018年6月29日 19:58
*题目描述:为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最*强的那个学校。
*输入格式: *输入在第1行给出不超过10^5^的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的**学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。
*输出格式:
*在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
*输入样例:
*6
*3 65
*2 80
*1 100
*2 70
*3 40
*3 0
*输出样例:
* 2 150
*/
#include <stdio.h>
int main(void)
{
int i, j;
int max = 0;
int N;
scanf("%d", &N);
if(N > 100000)
{
return -1;
}
int school;
int score;
int max_school;
//定义一个变量记录学校编号
int sum[100001] = {0}; //定义一个数组,记录同一所学校的得分总和
for(i = 0; i < N; i++)
{
scanf("%d %d", &school, &score); //输入各位参赛者的信息
sum[school] += score; //编号相同的学校的参赛者分数加在一起
if(sum[school] > max) //筛选出得分最高的学校的编号和成绩总和
{
max =sum[school];
max_school = school;
}
}
printf("%d %d\n", max_school, max); //打印学校编号和成绩
return 0;
}
/*题号:1036 跟奥巴马一起编程(15)(15 point(s))
*作者:钱金柱
*日期:2018年7月2日 12:31
*题目描述:美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3<=N<=20)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
输入样例:
10 a
输出样例:
aaaaaaaaaa
a a
a a
a a
aaaaaaaaaa
*/
#include <stdio.h>
int main(void)
{
int i,j;
int N;
char ch;
scanf("%d %c", &N, &ch); //给出正方形的边长和组成正方形的字符
int line; //定义一个变量表示正方形的行数
if((N % 2) == 0)
line = N / 2; //根据给定的边长,有四舍五入确定行数
else
line = (N + 1) / 2;
for(i = 0; i < N; i++)
printf("%c", ch); //打印第一行字符
printf("\n");
for(i =0; i < (line - 2); i++) //打印第2行到第(line-1)字符
{
for(j = 0; j < N; j++)
{
if(j == 0)
printf("%c", ch);
else if(j == (N - 1))
{
printf("%c", ch);
printf("\n");
}
else
printf(" ");
}
}
for(i = 0; i < N; i++)
printf("%c", ch); //打印第一行字符
printf("\n");
return 0;
}
#include <stdio.h>
#include <math.h>
int main(void)
{
int i, j, z;
int N;
char c;
scanf("%d %c", &N,&c); //输入要打印符号的数量 ;输入要打印的符号
double n, s; //符号从第一行递减到一个时的行数
s = sqrt((N + 1)/2);
n = floor(s); //一半沙漏的行数
int bottom = 0;
bottom = 2 * n - 1; //顶端字符数
if(bottom % 2 == 0) //判断最顶端字符数是否为奇数
bottom = bottom - 1;
int rest = 0; //剩余字符数
rest = N - ((1 + bottom) * (1 + bottom))/2 + 1;
for(i = 0; i < n; i++)
{
for(z = 0; z < i; z++)
{
printf(" ");
}
for(j = 0; j < (bottom - 2 * i); j++)
{
printf("%c", c);
}
printf("\n");
}
for(i = 1; i < n; i++)
{
for(z = (n - 1 - i); z > 0; z--)
{
printf(" ");
}
for(j = 0; j < (1 + 2 * i); j++)
{
printf("%c", c);
}
printf("\n");
}
printf("%d\n", rest);
return 0;
}
*题号:1012. 数字分类 (20)
*作者:钱金柱
*日期:2018年4月10日 14:12
*题目描述:给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:
A1 = 能被5整除的数字中所有偶数的和;
A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...;
A3 = 被5除后余2的数字的个数;
A4 = 被5除后余3的数字的平均数,精确到小数点后1位;
A5 = 被5除后余4的数字中最大数字。
输入格式:
每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。
输出格式:
对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出“N”。
输入样例1:
13 1 2 3 4 5 6 7 8 9 10 20 16 18
输出样例1:
30 11 2 9.7 9
输入样例2:
8 1 2 4 5 6 7 9 16
输出样例2:
N 11 2 N 9
*/
#include<stdio.h>
#include <math.h>
//float power(float x,int n);
int main(void)
{
float f;
int A1 = 0;
int A2 = 0;
int A3 = 0;
float A4 = 0.0;
int A5 = 0;
int m = 0;
int n = 0;
int i, d, z;
int j = -1;
int temp1 = 0;
int temp2 = 0;
char c = 'N';
int N;
scanf("%d", &N);
int a[N];
int b[1000];
for(i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
for(i = 0; i < N; i++)
{
if(a[i] % 2 == 0 && a[i] % 5 == 0)
A1 += a[i];
else
continue;
}
if(A1 != 0)
printf("%d ", A1);
else
printf("%c ", c);
for(i = 0; i < N; i++)
{
if(a[i] % 5 == 1)
{
m += 1;
A2 += a[i] * pow(-1,m+1);
//A2 += a[i] * power(-1,m + 1);
}
else
temp1 += 1;
}
if(temp1 != N)
printf("%d ", A2);
else
printf("%c ", c);
for(i = 0; i < N; i++)
{
if(a[i] % 5 == 2)
A3 += 1;
else
continue;
}
if(A3 != 0)
printf("%d ", A3);
else
printf("%c ", c);
for(i = 0; i < N; i++)
{
if(a[i] % 5 == 3)
{
n += 1;
A4 += a[i];
}
else
temp2 += 1;
}
if(temp2 != N)
printf("%.1f ", A4 / n);
else
printf("%c ", c);
for(i = 0; i < N; i++)
{
if(a[i] % 5 == 4)
{
j += 1;
b[j] = a[i];
}
else
continue;
}
for(z = 0; z <= j; z++)
{
d =b[z] - A5;
if(d >= 0)
A5 = b[z];
else
A5 = A5;
}
if(A5 != 0)
printf("%d\n", A5);
else
printf("%c\n", c);
return 0;
}
/* float power(float x,int n) //自定义乘方函数
{ int i;
float s=1.0; //初始化变量s,用于存储最终结果值
for( i=1;i<=n;i++ ) //利用循环进行计算,n次方就是把x乘上n遍
s *= x;
return s; //返回最终结果值
} */
/*题号:1018 锤子剪刀布 (20 分)
*作者:钱金柱
*日期:2018年10月25日 13:28
*题目描述:输入格式:
输入第 1 行给出正整数 N(≤105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B代表“布”,第个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。
输出格式:
输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。
输入样例:
10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J
输出样例:
5 3 2
2 3 5
B B
*/
#include <stdio.h>
int main()
{
int N;
scanf("%d", &N);
if (N > 100000)
{
return -1;
}
int i = 0;
int jiaWin = 0, jiaLose = 0, draw = 0;
int jiaJWin = 0, jiaCWin = 0, jiaBWin = 0;
int yiJWin = 0, yiCWin = 0, yiBWin = 0;
char jia, yi;
for(i = 0; i < N; i++)
{
scanf(" %c %c", &jia, &yi);
if(jia == 'C')
{
if(yi == 'C')
{
draw++;
}
else if(yi == 'J')
{
jiaWin++;
jiaCWin++;
}
else if(yi == 'B')
{
jiaLose++;
yiBWin++;
}
}
else if(jia == 'J')
{
if(yi == 'C')
{
jiaLose++;
yiCWin++;
}
else if(yi == 'J')
{
draw++;
}
else if(yi == 'B')
{
jiaWin++;
jiaJWin++;
}
}
else if(jia == 'B')
{
if(yi == 'C')
{
jiaWin++;
jiaBWin++;
}
else if(yi == 'J')
{
jiaLose++;
yiJWin++;
}
else if(yi == 'B')
{
draw++;
}
}
}
printf("%d %d %d\n", jiaWin, draw, jiaLose);
//yiwin就是jialose
printf("%d %d %d\n", jiaLose, draw, jiaWin);
//利用三目运算符比较三种手势胜负平
printf("%c ", jiaBWin >= jiaCWin ? (jiaBWin >= jiaJWin ? 'B' : 'J') : (jiaCWin >= jiaJWin ? 'C' : 'J'));
printf("%c\n", yiBWin >= yiCWin ? (yiBWin >= yiJWin ? 'B' : 'J') : (yiCWin >= yiJWin ? 'C' : 'J'));
return 0;
}