目录
7-1 组合数的和 (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
代码
#include<stdio.h>
int main()
{
int n,a[10],i,j,sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]); //数组赋初值
}
for(i=0;i<n-1;i++) //依次拿第i个数,最大到n-2 倒数第二个数
{
for(j=i+1;j<n;j++) //依次拿第i+1个数 最大到n-1 最后一个数
{
sum=sum+a[i]+a[j]*10; //两个数互相做个位与十位 并求和
sum=sum+a[i]*10+a[j];
}
}
printf("%d",sum);
return 0;
}
7-2 简化的插入排序 (10分)
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
输入格式:
输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。
输出格式:
在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。
输入样例:
5
1 2 4 5 7
3
输出样例:
1 2 3 4 5 7
代码
#include<stdio.h>
int main()
{
int n,i,t,a[10],flag=1;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]); //数组初始化
scanf("%d",&t);
for(i=0;i<n;i++){
if(t<=a[i]&&flag){ //找到第一个大于t的数组元素,并输出t
printf("%d ",t);
flag=0 ;
}
printf("%d ",a[i]);//输出其他的
}
if(t>=a[n-1]) //如果大于最后有一个值,末尾输出
printf("%d ",t);
return 0;
}
7-3 输出数组元素 (10分)
本题要求编写程序,对顺序读入的n个整数,顺次计算后项减前项之差,并按每行三个元素的格式输出结果。
输入格式:
输入的第一行给出正整数n(1<n≤10)。随后一行给出n个整数,其间以空格分隔。
输出格式:
顺次计算后项减前项之差,并按每行三个元素的格式输出结果。数字间空一格,行末不得有多余空格。
输入样例:
10
5 1 7 14 6 36 4 28 50 100
输出样例:
-4 6 7
-8 30 -32
24 22 50
代码
#include <stdio.h>
int main()
{
int arr[10];
int n;
int i = 0;
int flag = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]); //数组循环初始化
}
for (i = 1; i < n; i++)
{ //数组遍历输出后项减前项之差 所以i从1开始
printf("%d", arr[i]-arr[i-1]);
flag++; //flag用来计数
if (flag % 3 == 0)
{ //每三个数一换行
printf("\n");
}
else if(i<n-1) //不换行就是输出空格
{
printf(" ");
}
}
return 0;
}
7-4 判断题 (10分)
判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。
输入格式:
输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0 代表“非”,1 代表“是”。随后 N 行,每行给出一个学生的解答。数字间均以空格分隔。
输出格式:
按照输入的顺序输出每个学生的得分,每个分数占一行。
输入样例:
3 6
2 1 3 3 4 5
0 0 1 0 1 1
0 1 1 0 0 1
1 0 1 0 1 0
1 1 0 0 1 1
输出样例:
13
11
12
代码
#include<stdlib.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
int grade[n],stu[m],right[n];
int i,j;
for(i=0;i<n;i++) //把每个题的分数存起来;
{
scanf("%d",&grade[i]);
}
for(i=0;i<n;i++)//把正确答案存起来;
{
scanf("%d",&right[i]);
}
for(i=0;i<m;i++) //m个学生
{
stu[i]=0; //把该学生得分置零;
for(j=0;j<n;j++) //n个题
{
int t;
scanf("%d",&t);
if(t==right[j])
stu[i]=stu[i]+grade[j]; //如果这个题对了,则把分数累加;
}
}
for(i=0;i<m;i++) //循环输出m个学生的成绩
printf("%d\n",stu[i]);
return 0;
}
7-5 求矩阵各行元素之和 (10分)
本题要求编写程序,求一个给定的m×n矩阵各行元素之和。
输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间
以空格分隔。
输出格式:
每行输出对应矩阵行元素之和。
输入样例:
3 2
6 3
1 -8
3 12
输出样例:
9
-7
15
代码
#include<stdio.h>
int main(){
int m,n,sum=0;
scanf("%d %d",&m,&n);
int a[m][n],i,j;
for(i=0;i<m;i++) //二维数组 双重循环输入
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++){
for(j=0;j<n;j++){ //列循环
sum+=a[i][j]; //每行求和
}
printf("%d\n",sum); //输出结果
sum=0; //每行求完重置为0
}
return 0;
}