【PTA-C语言】编程练习4 - 数组Ⅰ
- 如果代码存在问题,麻烦大家指正 ~ ~
- 有帮助麻烦点个赞 ~ ~
7-1 评委打分(分数 10)
作者 翁恺
单位 浙江大学
班级里要搞智力竞赛啦!同学们都踊跃参加。进入最后决赛的是10个同学,随着一道道题目的出示,有时是1号选手得分,有时是5号选手得分,每次答对者得10分,最后结果如何呢?
输入格式:
第一行有十个整数,表示十位同学的初始分。第二行一个整数n,表示有n道题竞赛。
接下去有n行,每行有一个数字x,x表示本次可以加分的选手序号(每次答对者得10分)。
输出格式:
10个同学最终的得分值,每两位同学之间有一个空格。
输入样例:
10 0 0 0 10 10 0 0 0 10
3
1
10
1
输出样例:
30 0 0 0 10 10 0 0 0 20
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
#include<stdio.h>
int main()
{
int i, j, n, b;
int a[10];
for(i=0; i<10; i++)
scanf("%d", &a[i]);
scanf("%d", &n);
for(i=0; i<n; i++) {
scanf("%d", &b);
a[b-1] += 10;
}
for(i=0; i<10; i++)
if(i==9)
printf("%d", a[i]);
else
printf("%d ", a[i]);
return 0;
}
7-2 组合数的和(分数 10)
作者 陈越
单位 浙江大学
给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。
输入格式:
输入在一行中先给出 N(1 < N < 10),随后一行给出 N 个不同的非 0 个位数字。数字间以空格分隔。
输出格式:
输出所有可能组合出来的2位数字的和。
输入样例:
3
2 8 5
输出样例:
330
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
#include<stdio.h>
int main()
{
int i, j, n, sum=0;
int a[100];
scanf("%d", &n);
for(i=0; i<n; i++)
scanf("%d", &a[i]);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if(j!=i)
sum += a[i]*10+a[j];
printf("%d\n", sum);
return 0;
}
7-3 找不同(分数 15)
作者 胡伟平
单位 广西科技大学
这是一个签到题,非常简单。一群网友在网上在玩游戏,看谁是最与众不同的,每一个人都单独写一个数字,然后依次上交,谁的数据没有和其他人重复,谁就赢了,如果有很多人都与众不同,那么第一个做到的才是真正的与众不同。
输入格式:
输入是一个测试用例,首先给出网友个数N,之后依次给出N个正整数,给出的正整数和N都不超过10的5次方。
输出格式:
对每一组输入,输出与众不同的那个数,如果没有,输出None
。
输入样例1:
在这里给出一组输入。例如:
8 1 2 3 4 4 5 3 1
输出样例1:
在这里给出相应的输出。例如:
2
输入样例2:
在这里给出一组输入。例如:
8 1 2 3 4 4 3 2 1
输出样例2:
在这里给出相应的输出。例如:
None
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
参考代码
#include <stdio.h>
int main()
{
int i, j, N, m=0, n=0;
scanf("%d", &N);
int a[N];
for(i=0; i<N; i++)
scanf("%d", &a[i]);
for(i=0; i<N; i++) {
for(j=0; j<N; j++)
if(a[i]==a[j] && i!=j)
m++;
if(m==0){
printf("%d",a[i]);
break;
}
n++;
m=0;
}
if(n==N)
printf("None");
return 0;
}
7-4 利用二分查找搜寻所有待查找数据(分数 15)
作者 Sun Jun
单位 武汉理工大学
利用二分法在一个有N(N≤20)个元素的有序数列中查找指定值y。找到y后,先输出查找次数,再输出其在数组中对应的下标。若数列中存在多个y,将所有y的位置按下标序号顺序输出;
否则输出“not found”.
输入格式:
输入在第1行中给出1个不大于20的数N。在第2行给出N个数(升序),以空格分隔。最后在第3行给出待查找数据y。
输出格式:
若数列中存在y:先输出查询次数,在其后每行以格式“位置:k”,输出一个位置值。
若数列中没有y:输出“not found”。
输入样例 1:
10
34 56 78 87 87 87 87 112 520 888
87
输出样例 1:
查找次数1
位置:3
位置:4
位置:5
位置:6
输入样例 2:
10
34 56 78 87 87 87 87 112 520 888
80
输出样例 2:
not found
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
#include<stdio.h>
int main()
{
int n, b, i, j=0, l=0, h, mid, sum=1;
int a[20];
scanf("%d", &n);
h = n-1;
for (i=0; i<n; i++)
scanf("%d", &a[i]);
scanf("%d", &b);
while(l<=h) {
mid = (l+h)/2;
if(b==a[mid])
break;
else if(b<a[mid])
h = mid-1;
else
l = mid+1;
sum++;
}
for(i=0; i<n; i++)
if(a[i]==b)
if(j==0) {
j=1;
printf("查找次数%d\n", sum);
printf("位置:%d\n", i);
} else
printf("位置:%d\n", i);
if(j==0)
printf("not found");
return 0;
}
7-5 判断上三角矩阵(分数 10)
作者 C课程组
单位 浙江大学
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。
输入样例:
3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
3
1 2 3
1 4 5
0 -1 6
输出样例:
YES
NO
NO
鸣谢中水七局机电安装分局喻春桥补充数据!
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
#include<stdio.h>
int main()
{
int T, m, n, i, j, flag;
int a[10][10];
scanf("%d", &T);
for(m=0; m<T; m++) {
flag = 1;
scanf("%d", &n);
for(i=0; i<n; i++)
for(j=0; j<n; j++) {
scanf("%d", &a[i][j]);
if(i>j && a[i][j]!=0)
flag=0;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
7-6 方阵循环右移(分数 15)
作者 颜晖
单位 浙大城市学院
本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、?、n?1列变换为第n?m、n?m+1、?、n?1、0、1、?、n?m?1列。
输入格式:
输入第一行给出两个正整数m和n(1≤n≤6)。接下来一共n行,每行n个整数,表示一个n阶的方阵。
输出格式:
按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。
输入样例:
2 3
1 2 3
4 5 6
7 8 9
输出样例:
2 3 1 5 6 4 8 9 7
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
#include <stdio.h>
int main()
{
int i, j, n, m;
int a[10][10];
scanf("%d %d", &m, &n);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d", &a[i][j]);
m%=n;
for(i=0; i<n; i++) {
for(j=0; j<n; j++)
printf("%d ", a[i][(n-m+j)%n]);
printf("\n");
}
return 0;
}
7-7 TicTacToe游戏–胜负判定(分数 15)
作者 李民
单位 武汉理工大学
井字棋是一种在3x3格子上进行的连珠游戏,和五子棋比较类似,由于棋盘一般不画边框,格线排成井字故得名。
游戏规则:由分别代表O和X的两个游戏者轮流在格子里留下标记。由最先在任意一条直线上成功连接三个标记的一方获胜。(摘抄自百度百科)
读入一个3X3的二维数组,数组元素为’X’表示下X,元素为’O’表示下O,数组元素为’.'(英文符号“点”)表示未下棋,现编写程序进行当前胜负的判断,如果X方胜,则显示"X win!“,如果O方胜,则显示"O win!”,如果无人获胜,则显示"No one win!"。
输入格式:
读入一个3X3的二维数组,数组元素为’X’表示下X,元素为’O’表示下O,数组元素为’.'(英文符号“点”)表示未下棋。
输出格式:
若X方胜,则显示"X win!“;若O方胜,则显示"O win!”;若无人获胜,则显示"No one win!"。
输入样例1:
X.O
OX.
O.X
输出样例2:
X win!
输入样例2:
O.O
XX.
X..
输出样例2:
No one win!
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
#include <stdio.h>
int main()
{
char a[4][4];
int i, flag1=0, flag2=0;
for(i=0;i<3;i++)
scanf("%s",a[i]);
for(i=0;i<3;i++)
if((a[i][0]==a[i][1])&&(a[i][1]==a[i][2])&&(a[i][0]==a[i][2]))
if(a[i][0]!='.')
if(a[i][0]=='X')
flag1=1;
else
flag2=1;
for(i=0;i<3;i++)
if((a[0][i]==a[1][i])&&(a[1][i]==a[2][i])&&(a[0][i]==a[2][i]))
if(a[0][i]!='.')
if(a[0][i]=='X')
flag1=1;
else
flag2=1;
if(((a[0][0]==a[1][1])&&(a[1][1]==a[2][2])&&(a[0][0]==a[2][2]))||((a[0][2]==a[1][1])&&(a[1][1]==a[2][0])&&(a[0][2]==a[2][0])))
if(a[1][1]!='.')
if(a[1][1]=='X')
flag1=1;
else
flag2=1;
if(flag1&&(flag2==0))
printf("X win!\n");
else if((flag1==0)&&flag2==1)
printf("O win!\n");
else
printf("No one win!\n");
return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!