一.杨辉三角
题目描述
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),表示将要输出的杨辉三角的层数。
输出
输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开。
输入输出样例
样例输入 #1
复制
4
样例输出 #1
复制
1
1 1
1 2 1
1 3 3 1
代码:
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n][n];
a[0][0]=1;
if(n>=2)
{
a[1][1]=1;
a[1][2]=1;
}
int count=0;
for(int ii=0; ii<n; ii++)
{
count++;
for(int i=0; i<n; i++)
{
if(ii==0) a[i][ii]=1;
else if(i==count-1) a[i][ii]=1;
else
a[i][ii]=a[i-1][ii]+a[i-1][ii-1];
}
}
int tmp=0;
for(int j=0;j<n;j++)
{
tmp++;
for(int jj=0;jj<n;jj++)
{
if(jj<=tmp-1) printf("%d ",a[j][jj]);
}
printf("\n");
}
return 0;
}
二.求3×3矩阵对角线元素之和
题目描述
求一个3×3矩阵对角线元素之和。
输入
矩阵
输出
主对角线 副对角线 元素和
输入输出样例
样例输入 #1
复制
1 2 3
1 1 1
3 2 1
样例输出 #1
复制
3 7
代码
#include <stdio.h>
int main()
{
int a[3][3];
for(int i=0;i<3;i++)
{
for(int ii=0;ii<3;ii++)
{
scanf("%d",&a[i][ii]);
}
}
printf("%d %d",a[0][0]+a[1][1]+a[2][2],a[0][2]+a[1][1]+a[2][0]);
return 0;
}
三.矩阵下三角元素之和
题目描述
输入一个正整数 n (1≤n≤10), 再输入 n×n 的矩阵,要求该矩阵的下三角元素之和。
输入
输入包括 n+1 行 第一行为整数 n 接下来的 n 行为矩阵数据
输出
矩阵的下三角元素之和
输入输出样例
样例输入 #1
复制
5
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
样例输出 #1
复制
75
代码
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n][n];
int sum=0,count=0;
for(int i=0; i<n; i++)
{
count++;
for(int ii=0; ii<n; ii++)
{
scanf("%d",&a[i][ii]);
if(ii<=count-1)
sum+=a[i][ii];
}
}
printf("%d",sum);
return 0;
}
四.求二维数组中的鞍点
题目描述
如果矩阵 A 中存在这样的一个元素 Aij 满足条件 Aij是第 i 行中值最小的元素,且又是第 j 列中值最大的元素,则称之为该矩阵的一个马鞍点。请编程计算出 m×n 的矩阵 A的马鞍点。
输入
输入 m,n
然后输入数组中的每个元素。
输出
输出 m×n的矩阵 A 的所有马鞍点。题目保证每组数据中的马鞍点存在且唯一。
输入输出样例
样例输入 #1
复制
3 3
1 7 3
5 4 6
17 18 9
样例输出 #1
复制
9
代码
#include <stdio.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int a[m][n];
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
scanf("%d",&a[i][j]);
}
}
int lie,ii,hang1,hang2;
for(int i=0; i<m; i++)
{
int minh=a[i][0];
for(ii=0; ii<n; ii++)
{
if(a[i][ii]<=minh)
{
minh=a[i][ii];
hang1=i;
lie=ii;
}
}
int maxl=a[0][lie];
for(int j=0;j<m;j++)
{
if(a[j][lie]>=maxl)
{
maxl=a[j][lie];
hang2=j;
}
}
if(hang1==hang2)
printf("%d",minh);
}
return 0;
}
五.打印回型嵌套
题目描述
***********
* *
* ******* *
* * * *
* * *** * *
* * * * * *
* * *** * *
* * * *
* ******* *
* *
***********
观察这个图形,它是由一系列正方形的星号方框嵌套而成。
在上边的例子中,最外方框的边长为 11。
本题的任务就是从标准输入获得一个整数 n (1<n<100),程序则生成嵌套着的回字型星号方框,其最外层方框的边长为 n。
输入输出样例
样例输入 #1
复制
10
样例输出 #1
复制
**********
* *
* ****** *
* * * *
* * ** * *
* * ** * *
* * * *
* ****** *
* *
**********
提示
例如:输入 555,程序输出:
*****
* *
* * *
* *
*****
代码
#include <stdio.h>
//1=*;0=空格 ;
int main()
{
int n;
scanf("%d",&n);
int a[100][100]= {0};
int tmp=n-1,s=0,i;
while (tmp-s>=0)
{
for(i=s; i<=tmp; i++)
{
a[s][i]=1;
a[i][s]=1;
a[tmp][i]=1;
a[i][tmp]=1;
}
s=s+2;
tmp=tmp-2;
}
for(int i=0; i<n; i++)
{
for(int ii=0; ii<n; ii++)
{
if(a[i][ii]==0) printf(" ");
else printf("*");
}
printf("\n");
}
return 0;
}
六.海选女主角
题目描述
potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口。 “做什么比较挣钱呢?筛沙子没力气,看大门又不够帅...”potato老师很是无奈。 “张艺谋比你还难看,现在多有钱呀,听说还要导演奥运开幕式呢!你为什么不去娱乐圈发展呢?”lwg在一旁出主意。 嗯,也是,为了生存,就委屈点到娱乐圈混混吧,马上就拍一部激光电影《杭电记忆——回来我的爱》。 说干就干,马上海选女主角(和老谋子学的,此举可以吸引媒体的眼球,呵呵),并且特别规定,演员必须具有ac的基本功,否则直接out! 由于策划师风之鱼(大师级水王)宣传到位,来应聘的MM很多,当然包括nit的蛋糕妹妹等呼声很高的美女,就连zjut的jqw都男扮女装来应聘(还好被安全顾问hdu_Bin-Laden认出,给轰走了),看来娱乐圈比acm还吸引人哪... 面试那天,刚好来了m*n个MM,站成一个m*n的队列,副导演Fe(OH)2为每个MM打了分数,分数都是32位有符号整数。 一开始我很纳闷:分数怎么还有负的?Fe(OH)2解释说,根据选拔规则,头发染成黄色、化妆太浓、穿的太少等等都要扣分数的,扣的多了就可能是负分了,当然,如果发现话语中夹有日语,就直接给-2147483648分了。 分数送上来了,是我做决定的时候了,我的一个选拔原则是,要选一个面试分数绝对值最大的MM。 特别说明:如果不幸选中一个负分的MM,也没关系,因为我觉得,如果不能吸引你,那要想法恶心你。
提示:绝对值函数fabs()在使用使要添加math.h函数库
输入
输入数据有多组,每组的第一行是两个整数m和n(1<=m,n<=100),表示应聘MM的总共的行列数,然后是m行整数,每行有n个,m和 n的定义见题目的描述。
输出
对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。 note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。
输入输出样例
样例输入 #1
复制
2 3
1 4 -3
-7 3 0
样例输出 #1
复制
2 1 -7
代码
#include <stdio.h>
#include <math.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int a[m][n];
for(int i=0; i<m; i++)
{
for(int ii=0; ii<n; ii++)
{
scanf("%d",&a[i][ii]);
}
}
int max=0,hang,lie;
for(int i=0; i<m; i++)
{
for(int ii=0; ii<n; ii++)
{
if(max<fabs(a[i][ii]))
{
max=fabs(a[i][ii]);
hang=i;
lie=ii;
}
}
}
printf("%d %d %d",hang+1,lie+1,a[hang][lie]);
return 0;
}
七.软件工程
题目描述
Merlin 的软件工程老师 Max 布置了开发一个软件的大作业。由于这是一个大型软件,所以单靠 Merlin 一个人不可能在预定时间内做完,必须与其他人合作。
由于大家都要做这个作业,所以 Merlin 理所当然找他的同班同学,但是同班同学的能力是参差不齐的。全班都很明确,这个工程可以分为 n 个不同的部分,每个部分都是独立,并且每个人都有一定的能力完成其中一个部分。Merlin 认为,自己应该去做项目经理的职位,把 nnn 个部分分配给若干个人,不同的部分可以分配给一个人或者多个人,但是一个部分只能分配给一个人。
Merlin 的人缘很好,同学们都愿意与他合作。但是,每个人每个部分能够得到的分数是不同的,Merlin 希望给每个人每个部分能够得到的分数一个估算(百分制),而能够得到的分数就是项目的个人部分的总和,最后求出平均值。即 最后分数=每个部分的分数 最后分数 = 每个部分的分数/n。
面对众多的分数,Merlin 已经害怕了,而且 Merlin 很懒,自己不想去做其中任何的一个部分,请你编写一个程序,帮助 Merlin 求出可以得到的最高分。
输入
第 1 行是一个正整数 n (n≤1000),表示项目可以划分为 nnn 部分。
第 2 行是一个正整数 m (m≤1000),表示全班一共有 mmm 个同学(不包括 Merlin)。
然后是 mmm 行 nnn 列的正整数,第 iii 行 jjj 列正整数 k(k≤100),示同学 i 可以在项目中的第 j 部分获得分数 kkk。
输出
只有一个实数。Merlin 能够得到的最大分数,结果保留两位小数。
输入输出样例
样例输入 #1
复制
5
5
90 90 90 85 90
90 85 90 90 85
90 90 85 90 90
90 90 90 90 85
85 90 85 90 90
样例输出 #1
复制
90.00
代码
#include<stdio.h>
int main()
{
int n,m;
scanf("%d%d",&n,&m);
float a[m][n];
for(int i=0; i<m; i++)
{
for(int ii=0; ii<n; ii++)
{
scanf("%f",&a[i][ii]);
}
}
float sum=0;
for(int i=0; i<n; i++)
{
float max=a[0][i];
for(int ii=0; ii<m; ii++)
{
if(a[ii][i]>=max)
{
max=a[ii][i];
}
}
sum+=max;
}
printf("%.2f",sum/n);
return 0;
}