补题报告2
1.求方阵和
给定一个N×N的方阵,本题要求计算该方阵除对角线、最后一列和最后一行以外的所有元素之和。对角线为从方阵的左上角至右下角的连线
函数接口定义:
void createMatrix(int a[][N]); //创建n阶方阵a[N][N],裁判程序实现,细节略。
int sumMatrix(int a[][N]); //计算方阵除对角线、最后一列和最后一行以外的所有元素之和。
裁判测试程序样例:
#include<stdio.h>
#define N 10
void createMatrix(int a[][N]);
int sumMatrix(int a[][N]);
int main()
{
int a[N][N];
createMatrix(a);
printf("%d\n",sumMatrix(a));
return 0;
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
结尾无空行
输出样例:
在这里给出相应的输出。例如:
360
结尾无空行
int sumMatrix(int a[][N]){
int i,j=0; int sum=0; for(i=0;i<N;i++){ for(j=0;j<N;j++){ if(i!=j&&i!=N-1&&j!=N-1){ sum=sum+a[i][j]; } } }return sum; }
2.最受欢迎的菜品
某自助餐厅要求餐厅的客人在就餐后进行投票,选出一款最喜爱的菜品,每日营业结束后进行投票统计,选出投票数最多的菜品为最受欢迎的菜品。 请编写一个程序帮助餐厅快速完成这个统计工作。
输入格式:
第1行中给出一个正整数n(不超出1000),表示菜品的数量,每个菜品使用1~n进行编号。 第2行输入若干以空格间隔的正整数,表示客人投出的最喜爱的菜品编号,以键盘结束符^Z或文件结束符结束输入。
输出格式:
每行输出一个最受欢迎的菜品编号和得票数。 菜品编号和得票数间隔1个空格。如果有并列的最受欢迎的菜品,则按编号从小到大的顺序输出每一个菜品,每个菜品占一行。
输入样例:
10
6 8 5 8 9 3 6 6 8 2 1 4 7 2 8 3 8 9 6 3 8 10 6 6
结尾无空行
输出样例:
6 6
8 6
结尾无空行
#include<stdio.h> int main(){ int n,i=0,j=0,c; int a[1001],b[1001]={0}; scanf("%d",&n); for(i=0;i<n;i++){ a[i]=i+1; } while(scanf("%d",&c)!=EOF){ for(j=0;j<n;j++){ if(c==a[j]) b[j]++; } } int max=0; for(i=0;i<n;i++){ if(b[i]>b[max]) max=i; } for(j=0;j<n+1;j++){ if(b[j]==b[max]) printf("%d %d\n",j+1,b[max]); } return 0; }
3.字符串循环左移
输入一个字符串和一个非负整数N,要求将字符串循环左移N次。
输入格式:
输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
输出格式:
在一行中输出循环左移N次后的字符串。
输入样例:
Hello World!
2
结尾无空行
输出样例:
llo World!He
结尾无空行
#include<stdio.h> int main(){ int i=0,len=0,N; char s[100]; while((s[len]=getchar())!='\n'){ len++; } scanf("%d",&N); N%=len; for(i=N;i<len;i++){ printf("%c",s[i]); } for(i=0;i<N;i++){ printf("%c",s[i]); } return 0; }
4.顺时针矩阵
读入20内正整数正整数n,输出顺时针分布的矩阵。矩阵内容为1,2,。。。到n*n。
输入格式:
每个实例包含一个20内正整数。
输出格式:
顺时针分布的矩阵,每个数据占4位。
输入样例:
7
结尾无空行
输出样例:
19 20 21 22 23 24 1
18 37 38 39 40 25 2
17 36 47 48 41 26 3
16 35 46 49 42 27 4
15 34 45 44 43 28 5
14 33 32 31 30 29 6
13 12 11 10 9 8 7
结尾无空行
#include<stdio.h> int main(){ int N,i,j,n,num=1; int a[21][21]; scanf("%d",&N); for(n=0;n<=N/2;n++){ for(i=n;i<N-n-1;i++) a[i][N-n-1]=num++; for(j=N-n-1;j>n;j--) a[N-n-1][j]=num++; for(i=N-n-1;i>=n;i--) a[i][n]=num++; for(j=n+1;j<N-n-1;j++) a[n][j]=num++; } for(i=0;i<N;i++){ for(j=0;j<N;j++) printf("%4d",a[i][j]); printf("\n"); } return 0; }
5.本题目要求将键盘输入的一个整数使用递归函数Porder,正序打印出来。
#include<stdio.h> void Porder(int n); int main() { int num; scanf("%d",&num); Porder(num); return 0; } void Porder(int n){ if ( n>=10) { Porder ( n/10); } printf ( "%d\n",n%10) ; }