本人小趴菜一名,大家有问题可以在评论区直接提问就行,大家一起解决,欢迎大家指出错误或者其他可借鉴的代码,让我们一起进步吧!
郑州轻工业大学zzulioj1124~1130
1124两个有序数组合并
题目描述
已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。
输入
输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000。
输出
输出合并后的m+n个整数,数据之间用空格隔开。输出占一行。
样例输入 Copy
4 1 2 5 7
3 6 4 2
样例输出 Copy
7 6 5 4 2 2 1
代码如下(示例):
#include<stdio.h>
int a[1000000]={0},b[1000000];//防止堆栈溢出
int main(){
int n,m,i,j,k=0;
scanf("%d",&n);
for(i=n-1;i>=0;i--){
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(j=0;j<m;j++){
scanf("%d",&b[j]);
}
//初始化 两个数组完毕
//算法思想 a数组按照逆序遍历
int c[n+m];
i=0,j=0;//初始化
while (i < n && j < m) {
if (a[i] >= b[j])
c[k++] = a[i++];
else
c[k++] = b[j++];
}
while (i < n)
c[k++] = a[i++];
while (j < m)
c[k++] = b[j++];
for(k=0;k<m+n-1;k++)
printf("%d ",c[k]);
printf("%d",c[m+n-1]);
return 0;
}
1125上三角矩阵的判断
题目描述
编写程序,输入一个正整数n(1<=n<=10)和n阶方阵a中的元素,如果a是上三角矩阵,输出“YES”,否则,输出“NO”。
上三角矩阵即主对角线以下(不包括主对角线)的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
要求定义函数IsUpperTriMatrix()判断矩阵a是否是上三角矩阵,如果是返回1,否则返回0。函数原型如下:
int IsUpperTriMatrix(int a[][N], int n);
输入
输入一个正整数n(1<=n<=10)和n阶方阵a中的元素,均为整数。
输出
如果a是上三角矩阵,输出“YES”,否则,输出“NO”
样例输入 Copy
4
1 2 3 4
0 2 2 2
0 0 3 4
0 0 0 4
样例输出 Copy
YES
代码如下(示例):
#include <stdio.h>
#include <stdlib.h>
#define N 10
//声明函数原型
int IsUpperTriMatrix(int a[][N], int n);
//上三角矩阵的判断
int main() {
int a[N][N];
int n, i, j;
//输入n,表示n阶方阵
scanf("%d", &n);
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
//输入方阵a中的元素
scanf("%d", &a[i][j]);
}
}
//调用函数判断是否是上三角矩阵
if(IsUpperTriMatrix(a, n) == 1)
printf("YES");
else
printf("NO");
return 0;
}
//判断矩阵a是否是上三角矩阵,如果是返回1,否则返回0。
int IsUpperTriMatrix(int a[][N], int n){
int i, j, flag = 1;
for(i = 0; i < n; i++){
for(j = 0; j < i; j++){
if(a[i][j] != 0)
flag = 0;
}
}
return flag;
}
1126布尔矩阵的奇偶性
题目描述
一个布尔方阵具有奇偶均势特性,当且仅当 每行、每列总和为偶数,即包含偶数个1。如下面这个4*4的矩阵就具有奇偶均势特性:
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
编写程序,读入一个n阶方阵并检查它是否具有奇偶均势特性。如果没有,你的程序应当再检查一下它是否可以通过修改一位(把0改为1,把1改为0)来使它具有奇偶均势特性;如果不可能,这个矩阵就被认为是破坏了。
输入
第一行是一个整数n ( 0< n < 100 ),代表该方阵的阶数。然后输入n 行,每行n个整数(0或1)。
输出
如果矩阵是布尔矩阵,输出“OK”;如果能通过只修改该矩阵中的一位来使它成为布尔矩阵,则输出“Change bit(i,j)”,这里i和j是被修改的元素的行与列(行,列号从0开始);否则,输出“Corrupt”。
样例输入 Copy
4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
样例输出 Copy
OK
代码如下(示例):
#include<stdio.h>
int main()
{
int n,i,j,sumx=0,sumy=0,isx=0,isy=0,x,y;
scanf("%d\n",&n);
int square[n][n];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&square[i][j]);//储存矩阵
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
isx+=square[i][j];
}
if(isx%2!=0)//行是否为奇数
{
sumx++;//如果是奇数,修改点加一
x=i;//确认修改点横坐标
isx=0;//重置行的累加和(重要)
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
isy+=square[j][i];
}
if(isy%2!=0)//列是否为奇数
{
sumy++;//如果是奇数,修改点加一
y=i;//确认修改点纵坐标
isy=0;//重置列的累加和(重要)
}
}
if(sumx==0&&sumy==0)//如果没有修改点(即行,列均不是奇数)
printf("OK");
else if(sumx==1&&sumy==1)//如果只有一个修改点,则该矩阵可改
printf("Change bit(%d,%d)",x,y);
else printf("Corrupt");//否则不可改
}
1127矩阵乘积
题目描述
计算两个矩阵A和B的乘积。
输入
第一行三个正整数m、p和n,0<=m,n,p<=10,表示矩阵A是m行p列,矩阵B是p行n列;
接下来的m行是矩阵A的内容,每行p个整数,用空格隔开;
最后的p行是矩阵B的内容,每行n个整数,用空格隔开。
输出
输出乘积矩阵:输出占m行,每行n个数据,以空格隔开。
样例输入 Copy
2 3 4
1 0 1
0 0 1
1 1 1 3
4 5 6 7
8 9 1 0
样例输出 Copy
9 10 2 3
8 9 1 0
代码如下(示例):
#include<stdio.h>
int main()
{
int m,p,n,i,j,a[100][100],b[100][100];
scanf("%d%d%d",&m,&p,&n);
for(i=0;i<m;i++)
{
for(j=0;j<p;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<p;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&b[i][j]);
}
}
int c[100][100],k=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=0;
for(k=0;k<p;k++)
{
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
}
}
for(i=0;i<m;i++)
{
printf("%d",c[i][0]);
for(j=1;j<n;j++)
{
printf(" %d",c[i][j]);
}
printf("\n");
}
return 0;
}
1128课程平均分
题目描述
期末考试结束,班主任拿到了本班学生的成绩汇总表,由m行n列组成(本班共有m名学生,本学期有n门课程),每行是一个同学的n门课程成绩,请编写程序,计算并输出每门课的平均分,结果保留2位小数。
输入
第一行是两个整数m和n,表示本班的人数和本学期课程数目,0<m<=1000,0<n<=10。
接下来是成绩单,有m行,每行n个实数。
输出
输出一行,有n个实数,保留两位小数,表示每门课的平均分,用空格隔开。
样例输入 Copy
5 4
80 65 70 95
99 38 59 90
30 78 81 85
90 43 13 80
65 87 79 80
样例输出 Copy
72.80 62.20 60.40 86.00
代码如下(示例):
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j, m, n;
double sum, a[1000][10];
scanf("%d%d", &m, &n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%lf", &a[i][j]);
}
}
for(j=0;j<n;j++)
{
sum=0;
for(i=0;i<m;i++)
{
sum=sum+a[i][j];
}
if(j!=n-1)
printf("%.2f ", sum/m);
else
printf("%.2f ", sum/m);
}
return 0;
}
1129第几天
题目描述
你知道,2012-1-1是该年的第1天,而9999-9-9呢?给你一个具体的日期,计算该日期是该年的第几天。
输入
输入一个日期,格式为:Year-month-day。year是小于9999的正整数。
输出
一个整数,表示该日期是该年的第几天。
样例输入 Copy
2012-3-1
样例输出 Copy
61
代码如下(示例):
#include<stdio.h>
int main()
{
int y,m,d,i,num=0;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d-%d-%d",&y,&m,&d);
if(y%400==0||(y%4==0&&y%100!=0))
{
a[1]=29;
}
for(i=0;i<m-1;i++)
{
num+=a[i];
}
num=num+d;
printf("%d\n",num);
return 0;
}
1130杨辉三角
题目描述
还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
输入
输入只包含一个正整数n(1 <= n <= 30),表示将要输出的杨辉三角的层数。
输出
输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开。
样例输入 Copy
4
样例输出 Copy
1
1 1
1 2 1
1 3 3 1
代码如下(示例):
#include<stdio.h>
int main()
{
int i,j,n,a[100][100];
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
if(i==0||j==0)
{
a[i][0]=1;}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
printf("%d ",a[i][j]);
if(i==j)
printf("\n");
}
}
return 0;
}