C++ 语法习题(2)

                                               第三讲 循环语句

1.偶数

编写一个程序,输出 1 到 100之间(包括 1 和 100)的全部偶数。

输入格式

无输入。

输出格式

输出全部偶数,每个偶数占一行。

输入样例
No input
输出样例
2
4
6
...
100

 参考代码:

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
int main()
{for(int i=1;i<=100;i++){if(i%2==0) cout<<i<<endl;}return 0;
}

2.奇数

输入一个整数 X,输出 1 到 X之间(包括 1 和 X)的全部奇数。

输入格式

一个整数 X。

输出格式

输出所有满足条件的奇数,每个数占一行。

数据范围

1≤X≤1000

输入样例:
8
输出样例:
1
3
5
7

参考代码:

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
int main()
{int x;cin>>x;for(int i=1;i<=x;i++){
//判断奇数是%2的结果不等于0if(i%2!=0) cout<<i<<endl;}return 0;
}

 3.正数

输入 6个实数,它们要么是正数,要么是负数。

请你统计并输出正数的个数。

输入格式

六个数字,每个占一行。

输出格式

输出格式为 x positive numbers,其中 x 为正数的个数。

数据范围

输入数字的绝对值不超过 100。

输入样例:
7
-5
6
-3.4
4.6
12
输出样例:
4 positive numbers

 参考代码:
 

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
int main()
{
//因为要从0统计>=0数的个数,所以s最开始定义 = 0;int s = 0;for(int i=0;i<6;i++){
//题目描述中输入可能是浮点数,所以直接输出浮点数float x;cin>>x;if(x>0) s++;}printf("%d positive numbers",s);return 0;
}

 4.连续奇数的和1

给定两个整数 X 和 Y,输出在他们之间(不包括 X 和 Y)的所有奇数的和。

输入格式

第一行输入 X,第二行输入 Y。

输出格式

输出一个整数,表示所有满足条件的奇数的和。

数据范围

−100≤X,Y≤100

输入样例1:
6
-5
输出样例1:
5
输入样例2:
15
12
输出样例2:
13
输入样例3:
12
12
输出样例3:
0

参考代码: 

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
int main()
{int x,y;cin>>x>>y;
//由于不知道x和y谁是最大值,所以在进行求和前先判断xy的大小,若x>y则进行交换.if(x>y){int t = x;x = y;y = t;}int s = 0;for(int i = x+1;i<y;i++){if(i%2!=0) s+=i;}cout<<s<<endl;return 0;
}

5.最大数和它的位置

 给定 100 个整数,请你找出其中最大的数字,以及它的输入位置(位置从 1 开始)。

输入格式

共 100 行,每行包含一个整数。

输出格式

第一行输出最大的数字。

第二行输出该数字的输入位置。

数据范围

1≤输入数字≤50000
保证输入数字互不相同。

输入样例:
22229
48558
24992
4755
11923
...
20213
输出样例:
48558
2

 参考代码:

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
int main()
{int a,b;for(int i=1;i<=100;i++){
//每次输入新的值后都进行对比是否比当前保存的最大值大,若大则更换.int x;cin>>x;if(x>b){a=i;b = x;}}cout<<b<<endl<<a<<endl;return 0;
}

6.递增序列

读取一系列的整数 X,对于每个 X,输出一个 1,2,…,X 的序列。

输入格式

输入文件中包含若干个整数,其中最后一个为 0,其他的均为正整数。

每个整数占一行。

对于输入的正整数,按题目要求作输出处理。

对于最后一行的整数 0,不作任何处理。

输出格式

对于每个输入的正整数 X,输出一个从 1 到 X 的递增序列,每个序列占一行。

数据范围

1≤X≤100

输入样例:
5
10
3
0
输出样例:
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10
1 2 3

参考代码: 

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
int main()
{
//由于当读取到零0的时候停止,所以先设计死循环while(1),当读取到0时候break while
//每次输出一行后换行,所以再for循环结束后再换行.while(1){int x;cin>>x;if(x==0) break;else{for(int i=1;i<=x;i++){cout<<i<<" ";}cout<<endl;}}return 0;
}

 7.连续整数相加

读入两个整数值 A 和 N,计算从 A 开始的 N 个连续整数的和。

注意,如果读入的 N为 0 或负数,则继续读取数字直至读入 N 值为正整数为止。

输入格式

共一行,包含整数 A 和若干个整数 N(不超过 100 个)。

输出格式

一个整数,表示从 A 开始的 N 个连续整数的和。

数据范围

1≤A≤100,
−100≤N≤100

输入样例1:
3 2
输出样例1:
7
输入样例2:
3 -1 0 -2 2
输出样例2:
7

 参考代码:

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
int main()
{int a,b;cin>>a>>b;
//因为b可能为<=0所以要一直输入知道b>0停止.while(b<=0){cin>>b;}int s = 0;
//相加从本身到本身后b个数(包含本身)for(int i=0;i<b;i++){s +=(a+i);}cout<<s<<endl;return 0;
}

8.约数

输入一个整数 N,按照从小到大的顺序输出它的全部约数。

输入格式

一个整数 N。

输出格式

输出全部约数,每个约数占一行。

数据范围

1≤N≤1000

输入样例:
6
输出样例:
1
2
3
6

 参考代码:

#include <cstdio>
int main()
{int n=0;scanf("%d",&n);
//约数就是n%i为0的数.for(int i=1;i<=n;i++){if(n%i==0) printf("%d\n",i);}return 0;
}

 9.PUM 

输入两个整数 N 和 M,构造一个 N 行 M 列的数字矩阵,矩阵中的数字从第一行到最后一行,按从左到右的顺序依次为 1,2,3,…,N×M。

矩阵构造完成后,将每行的最后一个数字变为 PUM。

输出最终矩阵。

输入格式

共一行,包含两个整数 N 和 M。

输出格式

输出最终矩阵,具体形式参照输出样例。

数据范围

1≤N,M≤20

输入样例:
7 4
输出样例:
1 2 3 PUM
5 6 7 PUM
9 10 11 PUM
13 14 15 PUM
17 18 19 PUM
21 22 23 PUM
25 26 27 PUM

参考代码:

#include <cstdio>
int main()
{int m,n;scanf("%d %d",&m,&n);int count=1;
//for循环中第一个for循环确定行,第二个for循环确定列for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(count%n==0) {count++;printf("PUM\n"); //每行以pum结尾所以记得换行.}else{printf("%d ",count);count++;}}}return 0;
}

 10.余数

输入一个整数 N,请按顺序输出 11到 10000之间(不包括 1 和 10000)的所有除以 N余 2 的数字。

输入格式

一个整数 N。

输出格式

输出所有满足条件的数字,从小到大每行输出一个。

数据范围

2<N<10000

输入样例:
13
输出样例:
2
15
28
41
...

 参考代码:
 

#include <cstdio>
int main()
{int x;scanf("%d",&x);for(int i=2;i<10000;i++){if(i%x==2) printf("%d\n",i);}return 0;
}

 11.六个奇数

读取一个整数 X,输出 X之后的 6 个奇数,如果 X 也是奇数,那么它也算作 6个奇数之一。

输入格式

一个整数 X。

输出格式

所有满足条件的奇数,每个占一行。

数据范围

1≤X≤100

输入样例:
9
输出样例:
9
11
13
15
17
19

 参考代码:

#include <cstdio>
int main()
{int x;scanf("%d",&x);int count=0;
//输入6个结束,所以count<6for(int i=x;count<6;i++){if(i%2!=0) {count++;printf("%d\n",i);}}return 0;
}

 12.乘法表

输入一个整数 N,输出 N的乘法表,如下:

1 x N = N      
2 x N = 2N        
...       
10 x N = 10N 
输入格式

一个整数 N。

输出格式

输出 N的乘法表,具体形式参照输出样例。

数据范围

1<N<1000

输入样例:
140
输出样例:
1 x 140 = 140
2 x 140 = 280
3 x 140 = 420
4 x 140 = 560
5 x 140 = 700
6 x 140 = 840
7 x 140 = 980
8 x 140 = 1120
9 x 140 = 1260
10 x 140 = 1400

 参考代码:

#include <cstdio>
int main()
{int x;scanf("%d",&x);for(int i=1;i<=10;i++){printf("%d x %d = %d\n",i,x,i*x);}return 0;
}

 13.实验

医学部一共进行了 N 场动物实验。

共有三种小动物可用来实验,分别是青蛙、老鼠和兔子。

每次实验都会选取其中一种动物来参与实验,选取数量若干。

现在请你统计一下医学部一共用了多少小动物,每种分别用了多少,每种动物使用数量占总量的百分比分别是多少。

输入格式

第一行包含整数 N,表示实验次数。

接下来 N 行,每行包含一个整数 A(表示一次实验使用的小动物的数量)和一个字符 T(表示一次实验使用的小动物的类型,C 表示兔子(coney),R 表示老鼠(rat),F 表示青蛙(frog))。

输出格式

请你参照输出样例,输出所用动物总数,每种动物的数量,以及每种动物所占百分比。

注意输出百分比时,保留两位小数。

数据范围

1≤N≤100,
1≤A≤15

输入样例:
10
10 C
6 R
15 F
5 C
14 R
9 C
6 R
8 F
5 C
14 R
输出样例:
Total: 92 animals
Total coneys: 29
Total rats: 40
Total frogs: 23
Percentage of coneys: 31.52 %
Percentage of rats: 43.48 %
Percentage of frogs: 25.00 %

参考代码: 

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{int n;int a;char t;int sum=0,sum1=0,sum2=0,sum3=0;//sum1表示兔子,sum2表示老鼠,sum3表示青蛙double s1,s2,s3;cin>>n;for(int i=1;i<=n;i++){cin>>a>>t;if(t=='C')sum1+=a;else if(t=='R')sum2+=a;elsesum3+=a;sum+=a;}
//(double)表示将类型强制转换为double类型.s1=(double)sum1/(double)sum*100;s2=(double)sum2/(double)sum*100;s3=(double)sum3/(double)sum*100;cout<<"Total: "<<sum<<" animals"<<endl;cout<<"Total coneys: "<<sum1<<endl;cout<<"Total rats: "<<sum2<<endl;cout<<"Total frogs: "<<sum3<<endl;printf("Percentage of coneys: %.2lf %\n",s1);printf("Percentage of rats: %.2lf %\n",s2);printf("Percentage of frogs: %.2lf %\n",s3);return 0;
}

 14.区间 2

读取 N 个整数 X1,X2,…,XN,判断这 N 个整数中有多少个在 [10,20] 的范围内,有多少个在范围外。

输入格式

第一行包含整数 N,表示共有 N个整数需要进行判断。

接下来 N 行,每行包含一个整数 Xi。

输出格式

第一行输出 x in,其中 x为在范围内的整数的数量。

第二行输出 y out,其中 y为在范围外的整数的数量。

数据范围

1≤N≤10000,
−10^7<Xi<10^7

输入样例:
4
14
123
10
-25
输出样例:
2 in
2 out

 15.连续奇数的和 2

输入 N对整数对 X,Y,对于每对 X,Y,请你求出它们之间(不包括 X 和 Y)的所有奇数的和。

输入格式

第一行输入整数 N,表示共有 N 对测试数据。

接下来 N行,每行输入一组整数 X 和 Y。

输出格式

每对 X,Y 输出一个占一行的奇数和。

数据范围

1≤N≤100,
−1000≤X,Y≤1000

输入样例:
7
4 5
13 10
6 4
3 3
3 5
3 4
3 8
输出样例:
0
11
5
0
0
0
12

 参考代码:

#include <iostream>
using namespace std;
int main()
{int n;scanf("%d",&n);for(int i=0l;i<n;i++){int x,y;int sum=0;scanf("%d %d",&x,&y);
//swap(x,y)交换函数,等于原来交换方法的三瓶子法.将x于y的值互换if(x>y) swap(x,y);for(int j=x+1;j<y;j++){if(j%2!=0) sum+=j;}printf("%d\n",sum);}return 0;
}

16.简单斐波那契

以下数列 0 1 1 2 3 5 8 13 21 ... 被称为斐波纳契数列。

这个数列从第 33 项开始,每一项都等于前两项之和。

输入一个整数 N,请你输出这个序列的前 N 项。

输入格式

一个整数 N。

输出格式

在一行中输出斐波那契数列的前 N 项,数字之间用空格隔开。

数据范围

0<N<46

输入样例:
5
输出样例:
0 1 1 2 3

参考代码:

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
int n;int main()
{cin>>n;
//本题的斐波那契以0为第一项,1为第二项.int a = 0,b = 1;for(int i=0;i<n;i++){printf("%d ",a);
//每次求出新的一项,a,b都往后平移int c = a + b;a = b, b = c;}return 0;
}

 17.数字序列和它的和

输入若干个整数对 M,N,对于每个数对,输出以这两个数为最大值和最小值的公差为 1 的等差数列。

注意,当输入整数对中,任意一个数为 0 或负整数时,立即停止输入,且该组数对无需作任何处理。

输入格式

输入共若干行,每行包含两个整数。

最后一行的两个整数中,至少有一个是非正整数。

输出格式

对于每组需作处理的数对,输出一个结果,每个结果占一行。

结果包含从最小值到最大值的数字序列以及数字序列各数字之和。

具体格式请参照输出样例。

数据范围

M,N≤100

输入样例:
2 5
6 3
5 0
输出样例:
2 3 4 5 Sum=14
3 4 5 6 Sum=18

 参考代码:

#include <iostream>
using namespace std;
int main()
{int m=1,n=1;cin>>m>>n;while(m>0&&n>0){int sum=0;
//判断mn大小,若m>n则交换使得m<nif(m>n) swap(m,n);
//求m到n所有数的和包括m和nfor(int i=m;i<=n;i++){cout<<i<<" ";sum+=i;}cout<<"Sum="<<sum<<endl;cin>>m>>n;}return 0;
}

 18.完全数

一个整数,除了本身以外的其他所有约数的和如果等于该数,那么我们就称这个整数为完全数。

例如,6 就是一个完全数,因为它的除了本身以外的其他约数的和为 1+2+3=6。

现在,给定你 N 个整数,请你依次判断这些数是否是完全数。

输入格式

第一行包含整数 N,表示共有 N个测试用例。

接下来 N 行,每行包含一个需要你进行判断的整数 X。

输出格式

每个测试用例输出一个结果,每个结果占一行。

如果测试数据是完全数,则输出 X is perfect,其中 X 是测试数据。

如果测试数据不是完全数,则输出 X is not perfect,其中 X 是测试数据。

数据范围

1≤N≤100,
1≤X≤10^8

输入样例:
3
6
5
28
输出样例:
6 is perfect
5 is not perfect
28 is perfect

 参考代码:

#include <iostream>
using namespace std;
int main()
{int n=0;cin>>n;for(int i=0;i<n;i++){
//因为本题的范围最大为10的8次方所以用long long类型.long long x=0;cin>>x;long long sum=0;for(int j=1;j*j<=x;j++){if(x%j==0) {if(j<x) sum+=j;if(x/j!=j && x/j<x) sum+=x/j;}}if(sum==x) printf("%lld is perfect\n",x);else printf("%lld is not perfect\n",x);}return 0;
}

 19.质数

一个大于 1 的自然数,如果除了 1 和它自身外,不能被其他自然数整除则称该数为质数。

例如 7 就是一个质数,因为它只能被 1 和 7 整除。

现在,给定你 N 个大于 1 的自然数,请你依次判断这些数是否是质数。

输入格式

第一行包含整数 N,表示共有 N 个测试数据。

接下来 N行,每行包含一个自然数 X。

输出格式

每个测试用例输出一个结果,每个结果占一行。

如果测试数据是质数,则输出 X is prime,其中 X 是测试数据。

如果测试数据不是质数,则输出 X is not prime,其中 X是测试数据。

数据范围

1≤N≤100
1<X≤10^7

输入样例:
3
8
51
7
输出样例:
8 is not prime
51 is not prime
7 is prime

参考代码:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{int n=0;cin>>n;for(int j=0;j<n;j++){int x; cin>>x;int i=0;
//i<=sqrt(x)也就是根号x,此方法更快速.for( i=2;i<=sqrt(x);i++){if(x%i==0) {printf("%d is not prime\n",x);
//当判断当前数为质数后就可以推出此for循环break;}}if(i>sqrt(x)) printf("%d is prime\n",x);}return 0;
}

 20.菱形

输入一个奇数 n,输出一个由 * 构成的 n阶实心菱形。

输入格式

一个奇数 n。

输出格式

输出一个由 * 构成的 n 阶实心菱形。

具体格式参照输出样例。

数据范围

1≤n≤99

输入样例:
5
输出样例:
  *  *** 
******** *  

参考代码:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{int n;cin>>n;
//本题可当作模板题,先背过int cx=n/2,cy=n/2;for(int i=0;i<n;i++){for(int j=0;j<n;j++){
//abs()绝对值函数,最后结果全部为正数.if(abs(i-cx)+abs(j-cy)<=n/2) cout<<"*";else cout <<" ";}cout<<endl;}return 0;
}

                                    第四讲 数组

1.数组替换

输入一个长度为 1010 的整数数组 X[10],将里面的非正整数全部替换为 1,输出替换完成后的数组。

输入格式

输入包含 10 个整数,每个整数占一行。

输出格式

输出新数组中的所有元素,每个元素占一行。

输出格式为 X[i] = x,其中 i为元素编号(从 0 开始),x 为元素的值。

数据范围

−100≤X[i]≤100

输入样例:
10
-9
0
-4
-10
0
-2
-7
7
4
输出样例:
X[0] = 10
X[1] = 1
X[2] = 1
X[3] = 1
X[4] = 1
X[5] = 1
X[6] = 1
X[7] = 1
X[8] = 7
X[9] = 4

参考代码:

#include <iostream>
using namespace std;
int main()
{int a[10];for(int i=0;i<10;i++){cin>>a[i];if(a[i]<=0) a[i]=1;printf("X[%d] = %d\n",i,a[i]);}return 0;
}

 2.数组填充

输入一个整数 V,输出一个长度为 10 的数组 N,数组中的第一个元素为 V,每个后续元素的值都为上一个元素的值的 2 倍。

例如,如果输入整数为 1,则数组为:1,2,4,8…

输入格式

输入一个整数 V。

输出格式

输出数组中的所有元素,每个元素占一行。

输出格式为 N[i] = x,其中 i 为元素编号(从 0 开始),x 为元素的值。

数据范围

1≤V≤50

输入样例:
1
输出样例:
N[0] = 1
N[1] = 2
N[2] = 4
N[3] = 8
N[4] = 16
N[5] = 32
N[6] = 64
N[7] = 128
N[8] = 256
N[9] = 512

参考代码:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{int v;cin>>v;int a[10];
//每次输出2的i次方for(int i=0;i<10;i++){
//pow(x,y)函数用来求x的y次方.a[i]=v*pow(2,i);printf("N[%d] = %d\n",i,a[i]);}return 0;
}

3.数组选择

输入一个长度为 100 的数组 A,请你按顺序输出其中不大于 10的所有元素。

输入格式

输入 100 个数,每个数占一行,表示数组的所有元素的值。

每个数可能是整数也可能是浮点数。

输出格式

按顺序输出数组中的所有不大于 10 的元素,每个元素占一行。

输出格式为 A[i] = x,其中 i 为元素编号,x 为元素的值。

注意,所有的 x 均保留一位小数。

数据范围

−100≤A[i]≤100

输入样例:
0
-5
63
-8.5
...
输出样例:
A[0] = 0.0
A[1] = -5.0
A[3] = -8.5
...

 参考代码:

#include <iostream>
using namespace std;
int main()
{
//数组定义的时候尽量定义更多一些,防止空间不够用.double a[110];for(int i=0;i<100;i++){cin>>a[i];if(a[i]<=10) printf("A[%d] = %.1lf\n",i,a[i]);}return 0;
}

4.数组中的行

输入一个二维数组 M[12][12],根据输入的要求,求出二维数组中某一行的元素的平均值或元素的和。

输入格式

第一行输入整数 L,表示所求的具体行数(行数从 0 开始计数)。

第二行包含一个大写字母,若为 S,则表示需要求出第 L 行的元素的和,若为 M,则表示需要求出第 L行的元素的平均值。

接下来 1212 行,每行包含 1212 个用空格隔开的浮点数,表示这个二维数组,其中第 i+1 行的第 j+1 个数表示数组元素 M[i][j]。

输出格式

输出一个数,表示所求的平均数或元素的和的值,保留一位小数。

数据范围

−100.0≤M[i][j]≤100.0

输入样例:
7
S
8.3 -9.4 -5.6 9.9 2.2 3.2 6.9 7.7 -2.9 -6.3 3.9 -1.4
-0.5 4.3 -0.3 2.3 0.7 -3.1 -6.3 5.7 -7.7 -3.7 9.7 3.8
5.8 -9.1 3.5 7.0 2.5 -2.3 6.9 2.7 5.8 -4.6 -7.8 4.3
-1.7 -8.9 -2.6 7.5 -9.6 6.4 -4.7 -8.0 0.6 6.7 -1.8 -0.4
-9.8 8.9 -3.8 -2.1 5.8 -9.4 1.3 6.3 -1.3 -6.3 -6.6 8.8
-6.3 -7.2 -6.3 -5.9 6.2 9.3 2.0 -4.3 2.7 3.6 -4.6 8.7
3.8 7.4 8.7 -2.8 6.0 -9.2 1.9 3.1 -7.2 -6.0 9.7 -8.4
-9.8 6.6 8.6 2.3 1.1 -2.9 6.6 -1.5 2.1 -5.1 6.4 -7.5
-0.6 -1.6 9.5 -6.6 3.0 3.4 -7.5 -7.9 3.1 2.0 1.7 -7.6
-9.0 9.4 6.6 -0.2 1.4 6.5 8.6 2.0 -1.3 0.2 4.0 -2.4
-7.3 -6.3 -8.6 -7.5 8.5 1.4 -3.3 7.1 0.8 3.3 3.0 0.1
3.3 9.0 1.7 5.2 -3.7 8.9 3.8 -7.4 -2.8 0.6 -2.4 7.1
输出样例:
6.9

参考代码:

#include <iostream>
using namespace std;
int main()
{int n;char s;cin>>n>>s;double a[12][12];for(int i=0;i<12;i++){for(int  j=0;j<12;j++){cin>>a[i][j];}}double sum=0;
//获得第n行的每列的数.for(int i=0;i<12;i++){sum+=a[n][i];}if(s=='M')printf("%.1lf\n",sum/12);else printf("%.1lf\n",sum);return 0;
}

5.数组的右上半部分

输入一个二维数组 M[12][12],根据输入的要求,求出二维数组的右上半部分元素的平均值或元素的和。

右上半部分是指主对角线上方的部分,如下图所示,黄色部分为对角线,绿色部分为右上半部分:

UOJ_1183.png

输入格式

第一行输入一个大写字母,若为 S,则表示需要求出右上半部分的元素的和,若为 M,则表示需要求出右上半部分的元素的平均值。

接下来 12 行,每行包含 12 个用空格隔开的浮点数,表示这个二维数组,其中第 i+1 行的第 j+1个数表示数组元素 M[i][j]。

输出格式

输出一个数,表示所求的平均数或元素的和的值,保留一位小数。

数据范围

−100.0≤M[i][j]≤100.0

输入样例:
M
-6.5 8.2 0.7 9.0 0.8 -4.3 0.9 -0.0 -7.9 7.1 -1.6 4.6
-9.4 -9.0 1.5 -9.0 -5.1 -0.5 -2.8 -9.1 8.0 -6.9 -5.5 -6.6
-6.8 0.3 3.8 6.1 -9.9 -9.3 8.5 8.6 5.0 6.9 -3.6 -3.0
-0.8 -1.6 -7.3 -6.7 4.4 -9.1 -9.0 1.6 0.3 -6.0 6.0 -0.8
-0.8 -6.0 -4.9 -3.9 6.4 6.2 -4.2 -0.9 7.9 1.6 -8.2 -9.2
7.8 -5.8 -5.8 -5.8 7.2 0.5 -7.9 1.2 -6.8 -9.1 0.3 -1.4
4.3 -7.2 3.5 -6.4 -9.1 -6.0 3.5 -5.1 -5.6 -6.9 -9.1 -2.1
-7.6 -7.1 0.7 -1.7 5.0 -9.0 1.4 -6.2 7.6 4.8 -7.5 4.0
-0.2 0.3 -4.2 8.4 0.7 -6.4 -2.7 3.5 -0.9 3.7 0.9 -2.7
7.1 0.1 8.4 -5.1 -7.9 -0.5 -5.3 -5.7 -4.6 9.6 -8.3 7.0
9.6 -9.8 3.3 -9.9 -6.8 6.7 3.1 1.2 -9.5 -4.3 -1.7 -9.7
1.8 5.0 8.3 -0.7 -0.9 3.2 2.5 0.5 7.3 8.3 0.3 0.9
输出样例:
-1.2

参考代码:

#include <iostream>
using namespace std;
int main()
{char s;cin>>s;double a[12][12];double sum=0;int count=0;for(int i=0;i<12;i++){for(int j=0;j<12;j++){cin>>a[i][j];
//图中所有绿色部分都是行坐标大于列坐标(i>j)if(j>i) {count++;sum+=a[i][j];}}}if(s=='M') printf("%.1lf",sum/count);else printf("%.1lf",sum);return 0;
}

 6.数组的左上半部分

输入一个二维数组 M[12][12],根据输入的要求,求出二维数组的左上半部分元素的平均值或元素的和。

左上半部分是指次对角线上方的部分,如下图所示,黄色部分为对角线,绿色部分为左上半部分:

UOJ_1185.png

输入格式

第一行输入一个大写字母,若为 S,则表示需要求出左上半部分的元素的和,若为 M,则表示需要求出左上半部分的元素的平均值。

接下来 1212 行,每行包含 1212 个用空格隔开的浮点数,表示这个二维数组,其中第 i+1 行的第 j+1 个数表示数组元素 M[i][j]。

输出格式

输出一个数,表示所求的平均数或和的值,保留一位小数。

数据范围

−100.0≤M[i][j]≤100.0

输入样例:
M
-0.4 -7.7 8.8 1.9 -9.1 -8.8 4.4 -8.8 0.5 -5.8 1.3 -8.0
-1.7 -4.6 -7.0 4.7 9.6 2.0 8.2 -6.4 2.2 2.3 7.3 -0.4
-8.1 4.0 -6.9 8.1 6.2 2.5 -0.2 -6.2 -1.5 9.4 -9.8 -3.5
-2.3 8.4 1.3 1.4 -7.7 1.3 -2.3 -0.1 -5.4 -7.6 2.5 -7.7
6.2 -1.5 -6.9 -3.9 -7.9 5.1 -8.8 9.0 -7.4 -3.9 -2.7 0.9
-6.8 0.8 -9.9 9.1 -3.7 -8.4 4.4 9.8 -6.3 -6.4 -3.7 2.8
-3.8 5.0 -4.6 2.0 4.0 9.2 -8.9 0.5 -3.9 6.5 -4.3 -9.9
-7.2 6.2 -1.2 4.1 -7.4 -4.6 4.7 -0.4 -2.2 -9.1 0.4 -5.8
9.1 -6.4 9.2 0.7 10.0 -5.7 -9.7 -4.4 4.7 4.7 4.9 2.1
-1.2 -6.2 -8.2 7.0 -5.3 4.9 5.5 7.2 3.4 3.2 -0.2 9.9
-6.9 -6.2 5.1 8.5 7.1 -0.8 -0.7 2.7 -6.0 4.2 -8.2 -9.8
-3.5 7.7 5.4 2.8 1.6 -1.0 6.1 7.7 -6.5 -8.3 -8.5 9.4
输出样例:
-0.8

 参考代码:

#include <iostream>
using namespace std;
int main()
{char s;cin>>s;double a[12][12];double sum=0;int count=0;for(int i=0;i<12;i++){for(int j=0;j<12;j++){cin>>a[i][j];
//图中所有绿色部分行左坐标i+列坐标j的值都小于11if(j+i<11) {count++;sum+=a[i][j];}}}if(s=='M') printf("%.1lf",sum/count);else printf("%.1lf",sum);return 0;
}

 7.数组的上方区域

输入一个二维数组 M[12][12],根据输入的要求,求出二维数组的上方区域元素的平均值或元素的和。

数组的两条对角线将数组分为了上下左右四个部分,如下图所示,黄色部分为对角线,绿色部分为上方区域:

UOJ_1187.png

输入格式

第一行输入一个大写字母,若为 S,则表示需要求出上方区域的元素的和,若为 M,则表示需要求出上方区域的元素的平均值。

接下来 12行,每行包含 12个用空格隔开的浮点数,表示这个二维数组,其中第 i+1 行的第 j+1个数表示数组元素 M[i][j]。

输出格式

输出一个数,表示所求的平均数或和的值,保留一位小数。

输出结果与标准答案据对误差不超过 0.1即视为正确。

数据范围

−100.0≤M[i][j]≤100.0

输入样例:
S
-4.8 -8.0 -2.9 6.7 -7.0 2.6 6.5 1.7 1.9 5.6 -1.6 -6.3
-4.3 1.5 8.7 -0.3 5.4 -9.3 4.8 7.0 3.6 -8.3 -1.0 1.3
-9.9 9.7 -6.3 5.8 2.9 2.9 -7.7 4.9 -0.6 7.2 6.4 7.7
2.8 -5.8 -0.0 2.2 4.0 7.7 -3.0 -7.5 -3.5 9.7 -4.3 -8.6
-1.8 -0.1 5.4 0.6 9.9 -3.7 -1.1 0.8 -0.2 -0.0 9.9 4.5
3.0 -3.9 2.1 -9.7 5.5 9.4 -4.6 3.3 -9.6 5.1 -4.5 1.5
4.3 -5.4 -7.9 9.2 -7.7 -9.6 -1.5 -1.6 -7.2 2.0 -3.7 -0.7
8.0 2.8 -4.1 7.1 8.4 -5.6 3.9 -9.7 -1.1 3.0 -8.5 -3.3
1.7 5.1 0.1 9.2 4.5 9.7 7.2 8.6 8.7 1.1 6.7 0.3
-3.6 -7.1 -8.9 7.1 -5.9 1.6 -7.4 6.7 3.9 4.3 -2.4 -3.7
8.9 -6.2 5.0 -8.6 -1.3 -8.8 2.6 8.9 5.5 9.0 -2.2 -4.4
5.7 3.7 1.8 -2.1 -7.3 -7.9 4.7 6.0 3.3 -2.8 1.4 -6.9
输出样例:
21.7

 参考代码:

#include <iostream>
using namespace std;
int main()
{char s;cin>>s;double a[12][12];double sum=0;int count=0;for(int i=0;i<5;i++){for(int j=0;j<12;j++){cin>>a[i][j];
//(i表示行,j表示列)图中所有绿色部分的列都大于行,且列小于11-行if(j>i && j<11-i) {count++;sum+=a[i][j];}}}if(s=='M') printf("%.1lf",sum/count);else printf("%.1lf",sum);return 0;
}

 8. 数组的左方区域

输入一个二维数组 M[12][12],根据输入的要求,求出二维数组的左方区域元素的平均值或元素的和。

数组的两条对角线将数组分为了上下左右四个部分,如下图所示,黄色部分为对角线,绿色部分为左方区域:

UOJ_1189.png

输入格式

第一行输入一个大写字母,若为 S,则表示需要求出左方区域的元素的和,若为 M,则表示需要求出左方区域的元素的平均值。

接下来 12 行,每行包含 12个用空格隔开的浮点数,表示这个二维数组,其中第 i+1 行的第 j+1 个数表示数组元素 M[i][j]。

输出格式

输出一个数,表示所求的平均数或和的值,保留一位小数。

数据范围

−100.0≤M[i][j]≤100.0

输入样例:
S
4.7 -3.3 -2.3 4.5 -7.0 8.7 -4.1 -3.0 -7.6 6.3 -6.6 -4.7
-7.2 9.3 -7.6 9.1 9.2 9.0 5.5 -7.5 -9.3 -1.6 -3.5 -4.2
0.5 -7.5 -8.3 -9.0 -6.4 3.8 0.1 -3.5 7.9 2.1 2.4 -6.2
7.0 5.7 -9.0 -5.8 1.6 2.6 -9.2 -6.2 4.6 8.2 -8.3 -1.4
3.8 -9.9 6.2 -2.5 -3.5 9.4 1.6 7.0 3.3 -0.5 6.7 6.0
1.6 -3.8 5.0 8.8 4.2 7.7 0.7 7.4 7.9 -5.9 4.4 3.3
3.7 6.2 6.7 -1.4 6.1 -6.0 8.5 9.1 5.7 -4.2 5.9 -3.5
5.0 0.3 2.2 -3.6 6.3 -10.0 9.5 -4.7 2.7 8.1 7.5 -8.4
-5.7 -0.3 -3.7 -3.3 7.7 9.3 -1.3 1.0 0.3 1.9 9.9 9.0
-7.4 1.3 -9.6 -3.6 2.2 3.4 -3.6 3.5 8.3 0.5 9.7 -6.8
1.0 -2.7 -1.5 5.4 -6.5 -3.7 5.6 8.0 -9.9 0.1 2.2 7.6
5.6 4.3 1.5 -0.8 5.8 -5.1 5.5 6.2 -5.8 8.8 -0.6 -2.3
输出样例:
13.3

 参考代码:

#include <cstdio>int main()
{char t;scanf("%c", &t);double q[12][12];for (int i = 0; i < 12; i ++ )for (int j = 0; j < 12; j ++ )scanf("%lf", &q[i][j]);double s = 0, c = 0;
//先统计1-5行绿色格子for (int i = 1; i <= 5; i ++ )for (int j = 0; j <= i - 1; j ++ ){s += q[i][j];c += 1;}
//再统计6-10行绿色格子for (int i = 6; i <= 10; i ++ )for (int j = 0; j <= 10 - i; j ++ ){s += q[i][j];c += 1;}if (t == 'S') printf("%.1lf\n", s);else printf("%.1lf\n", s / c);return 0;
}

* 9.平方矩阵 I

输入整数 N,输出一个 N 阶的回字形二维数组。

数组的最外层为 1,次外层为 2,以此类推。

输入格式

输入包含多行,每行包含一个整数 N。

当输入行为 N=0 时,表示输入结束,且该行无需作任何处理。

输出格式

对于每个输入整数 N,输出一个满足要求的 N 阶二维数组。

每个数组占 N行,每行包含 N 个用空格隔开的整数。

每个数组输出完毕后,输出一个空行。

数据范围

0≤N≤100

输入样例:
1
2
3
4
5
0
输出样例:
11 1
1 11 1 1
1 2 1
1 1 11 1 1 1
1 2 2 1
1 2 2 1
1 1 1 11 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

 参考代码:

#include <iostream>
using namespace std;
int main()
{int n;while(cin>>n,n){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int up=i,down=n-i+1,left=j,right=n-j+1;cout<<min(min(up,down),min(left,right))<<" ";}cout<<endl;}cout<<endl;}return 0;
}

10.数组变换

输入一个长度为 20 的整数数组 N,将整个数组翻转,使得第一个元素成为倒数第一个元素,第二个元素成为倒数第二个元素,…,倒数第二个元素成为第二个元素,倒数第一个元素成为第一个元素。

输出翻转后的数组。

输入格式

输入包含 20 个整数,每个数占一行。

输出格式

输出新数组中的所有元素,每个元素占一行。

输出格式为 N[i] = x,其中 i 为元素编号(从 0 开始),x为元素的值。

数据范围

−100≤N[i]≤100

输入样例:
0
-5
...
63
23
输出样例:
N[0] = 23
N[1] = 63
...
N[18] = -5
N[19] = 0

 参考代码:

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{int a[20];for(int i=0;i<20;i++){cin>>a[i];}
//reverse(数组名,数组名+要求逆置的长度)逆置函数,将reverse(12345)逆置->得到 54321reverse(a,a+20);for(int i=0;i<20;i++){printf("N[%d] = %d\n",i,a[i]);}return 0;
}

 11.斐波那契数列

输入整数 N,求出斐波那契数列中的第 N 项是多少。

斐波那契数列的第 0 项是 0,第 1 项是 1,从第 2 项开始的每一项都等于前两项之和。

输入格式

第一行包含整数 T,表示共有 T 个测试数据。

接下来 T 行,每行包含一个整数 N。

输出格式

每个测试数据输出一个结果,每个结果占一行,

结果格式为 Fib(N) = x,其中 N 为项数,x 为第 N 项的值。

数据范围

0≤N≤60

输入样例:
3
0
4
2
输出样例:
Fib(0) = 0
Fib(4) = 3
Fib(2) = 1

 参考代码:

#include <iostream>
using namespace std;
int main()
{
//因为怕超出int范围所以定义long long类型数组long long a[61];int n=0; cin>>n;for(int i=0;i<n;i++){int m; cin>>m;a[0]=0;a[1]=1;for(int i=2;i<=m;i++){a[i]=a[i-2]+a[i-1];}printf("Fib(%d) = %lld\n",m,a[m]);}return 0;
}

 12. 最小数和它的位置

输入一个整数 N和一个长度为 N 的整数数组 X。

请你找到数组中最小的元素,并输出它的值和下标。

注意,如果有多个最小值,则返回下标最小的那个。

输入格式

第一行包含整数 N。

第二行包含 N个用空格隔开的整数 X[i]。

输出格式

第一行输出 Minimum value: x,其中 x为数组元素最小值。

第二行输出 Position: y,其中 y 为最小值元素的下标(下标从 0 开始计数)。

数据范围

1<N≤1000,
−1000≤X[i]≤1000

输入样例:
10
1 2 3 4 -5 6 7 8 9 10
输出样例:
Minimum value: -5
Position: 4

 参考代码:

#include <iostream>
using namespace std;
int main()
{int n=0;cin>>n;int a[n];int min=1001;int index=0;
//若最小值重复,返下标最小的等同于返回数组下标最靠前的那个最小值.for(int i=0;i<n;i++){cin>>a[i];if(min>a[i]) {min=a[i];index=i;}}printf("Minimum value: %d\nPosition: %d",min,index);return 0;
}

13.数组中的列 

输入一个二维数组 M[12][12],根据输入的要求,求出二维数组中某一列的元素的平均值或元素的和。

输入格式

第一行输入整数 C,表示所求的具体列数(列数从 0 开始计数)。

第二行包含一个大写字母,若为 S,则表示需要求出第 C 列的元素的和,若为 M,则表示需要求出第 C 列的元素的平均值。

接下来 12 行,每行包含 12 个用空格隔开的浮点数,表示这个二维数组,其中第 i+1行的第 j+1 个数表示数组元素 M[i][j]。

输出格式

输出一个数,表示所求的平均数或元素的和的值,保留一位小数。

数据范围

−100.0≤M[i][j]≤100.0

输入样例:
1
S
-9.0 -2.4 -3.3 2.4 -9.7 -5.7 -5.3 6.5 -7.3 4.8 -4.1 3.9
1.6 -0.9 9.2 -7.5 1.0 -8.0 -4.1 -4.0 -0.1 -9.0 8.4 4.9
-8.2 -0.3 -5.1 -5.6 6.6 0.9 -1.0 -5.4 -2.1 -4.5 -8.7 -1.1
-4.2 6.5 -8.2 3.6 -4.6 -9.2 -1.7 6.9 -9.0 -9.8 7.7 -3.4
-8.0 5.7 4.8 0.3 -1.4 2.8 -6.3 9.3 0.3 6.3 1.5 -1.7
1.7 -0.0 9.7 -6.6 1.3 -2.0 -6.1 2.0 -7.8 -4.7 -9.1 6.0
-8.2 -1.7 9.4 -1.2 -1.0 -9.0 -7.0 -6.9 -1.6 -6.8 -6.7 1.8
4.8 1.3 -6.1 -0.6 0.5 -2.9 -6.8 1.5 5.8 3.2 0.0 7.7
6.3 1.1 4.7 7.3 7.6 5.6 0.9 9.2 1.3 -4.9 7.8 -4.9
0.5 3.5 -5.0 9.0 8.8 8.7 7.5 7.5 -9.6 -6.9 -1.6 6.9
7.8 5.6 -6.4 3.6 2.3 0.5 4.1 6.1 8.6 -9.3 2.2 -0.4
9.9 0.9 6.4 -2.8 -4.2 -7.6 0.6 9.6 3.0 0.9 5.1 4.5
输出样例:
19.3

#include <iostream>
using namespace std;
int main()
{int n;char s;cin>>n>>s;double a[12][12];double sum=0;for(int i=0;i<12;i++){for(int j=0;j<12;j++){cin>>a[i][j];
//变输出边判断如果是第c列,则加上c列所有行的元素.if(j==n) sum+=a[i][j];}}if(s=='M') printf("%.1lf",sum/12);else printf("%.1lf",sum);return 0;
}

 14.数组的右下半部分

输入一个二维数组 M[12][12],根据输入的要求,求出二维数组的右下半部分元素的平均值或元素的和。

右下半部分是指次对角线下方的部分,如下图所示,黄色部分为对角线,绿色部分为右下半部分:

UOJ_1186.png

输入格式

第一行输入一个大写字母,若为 S,则表示需要求出右下半部分的元素的和,若为 M,则表示需要求出右下半部分的元素的平均值。

接下来 12 行,每行包含 12 个用空格隔开的浮点数,表示这个二维数组,其中第 i+1 行的第 j+1 个数表示数组元素 M[i][j]。

输出格式

输出一个数,表示所求的平均数或和的值,保留一位小数。

数据范围

−100.0≤M[i][j]≤100.0

输入样例:
S
9.7 -4.9 6.1 -6.1 -9.6 1.0 -3.2 0.6 3.2 -9.8 4.9 1.2
-2.8 -5.3 2.8 -1.9 -5.4 7.5 -2.0 5.7 2.3 5.3 -7.5 8.9
6.0 4.3 3.8 -6.7 8.1 -0.5 7.8 -2.2 -1.0 4.0 -4.9 -9.4
5.4 3.7 -6.5 -3.9 -3.3 4.1 -2.5 -4.7 8.2 1.4 1.8 4.7
2.4 9.0 -4.3 9.6 8.6 -6.1 -7.4 8.6 5.6 0.5 -0.4 5.2
-5.2 2.9 -5.6 4.0 -0.2 3.8 -4.1 -1.6 -3.8 -3.1 -1.1 3.3
-9.4 -1.4 0.6 6.5 -4.3 -8.3 6.1 2.9 -5.2 2.5 9.8 -7.7
-2.9 -3.6 7.9 -5.8 -4.7 8.2 -6.2 1.0 7.4 -1.0 -4.4 -4.5
0.1 9.5 4.9 1.5 0.8 -8.2 0.4 9.5 -0.8 -0.9 9.7 -2.1
0.1 -7.6 7.8 -6.9 5.5 1.4 4.0 7.8 1.0 -1.2 9.7 -1.9
-4.6 2.3 -5.5 8.2 -4.8 -3.7 5.4 0.2 -2.4 -0.8 7.4 0.0
-0.1 8.2 0.8 -3.5 -7.6 -0.5 5.6 8.4 -8.6 0.9 9.0 -7.5
输出样例:
53.0

 参考代码:

#include <iostream>
using namespace std;
int main()
{char s;cin>>s;double a[12][12];double sum=0;int count=0;for(int i=0;i<12;i++){for(int j=0;j<12;j++){cin>>a[i][j];
//绿色部分所有行坐标+列坐标都>12if(i+j>=12) {sum+=a[i][j];count++;} }}if(s=='M') printf("%.1lf",sum/count);else printf("%.1lf",sum);return 0;
}

15.数组的左下半部分

输入一个二维数组 M[12][12],根据输入的要求,求出二维数组的左下半部分元素的平均值或元素的和。

左下半部分是指主对角线下方的部分,如下图所示,黄色部分为对角线,绿色部分为左下半部分:

UOJ_1184.png

输入格式

第一行输入一个大写字母,若为 S,则表示需要求出左下半部分的元素的和,若为 M,则表示需要求出左下半部分的元素的平均值。

接下来 12行,每行包含 12 个用空格隔开的浮点数,表示这个二维数组,其中第 i+1行的第 j+1 个数表示数组元素 M[i][j]。

输出格式

输出一个数,表示所求的平均数或和的值,保留一位小数。

数据范围

−100.0≤M[i][j]≤100.0

输入样例:
S
8.7 5.6 -2.0 -2.1 -7.9 -9.0 -6.4 1.7 2.9 -2.3 8.4 4.0
-7.3 -2.1 0.6 -9.8 9.6 5.6 -1.3 -3.8 -9.3 -8.0 -2.0 2.9
-4.9 -0.5 -5.5 -0.2 -4.4 -6.1 7.6 6.9 -8.0 6.8 9.1 -8.5
-1.3 5.5 4.6 6.6 8.1 7.9 -9.3 9.6 4.6 0.9 -3.5 -4.3
-7.0 -1.2 7.0 7.1 -5.7 7.8 -2.3 4.3 0.2 -0.4 -6.6 7.6
-3.2 -5.4 -4.7 4.7 3.6 8.8 5.1 -3.1 -2.9 2.8 -4.3 -1.4
-1.8 -3.3 -5.6 1.8 8.3 -0.5 2.0 -3.9 -1.0 -8.6 8.0 -3.3
-2.5 -9.8 9.2 -0.8 -9.4 -0.5 1.6 1.5 3.4 -0.1 7.0 -6.2
-1.0 4.9 2.2 -8.7 -0.9 4.8 2.3 2.0 -3.2 -7.5 -4.0 9.9
-1.1 -2.9 8.7 3.6 7.4 7.8 10.0 -9.0 1.6 8.3 6.3 -5.8
-9.9 0.6 2.0 -3.8 -6.3 0.6 7.3 3.8 -7.1 9.5 2.2 1.3
-2.8 -9.1 7.1 -0.2 0.6 -6.5 1.1 -0.1 -3.6 4.0 -5.4 1.1
输出样例:
-2.8

参考代码:

#include <iostream>
using namespace std;
int main()
{char s;cin>>s;double a[12][12];double sum=0;int count=0;for(int i=0;i<12;i++){for(int j=0;j<12;j++){cin>>a[i][j];
//绿色部分行坐标大于列坐标if(i>j) {sum+=a[i][j];count++;} }}if(s=='M') printf("%.1lf",sum/count);else printf("%.1lf",sum);return 0;
}

16.数组的下方区域 

输入一个二维数组 M[12][12],根据输入的要求,求出二维数组的下方区域元素的平均值或元素的和。

数组的两条对角线将数组分为了上下左右四个部分,如下图所示,黄色部分为对角线,绿色部分为下方区域:

UOJ_1188.png

输入格式

第一行输入一个大写字母,若为 S,则表示需要求出下方区域的元素的和,若为 M,则表示需要求出下方区域的元素的平均值。

接下来 12 行,每行包含 12 个用空格隔开的浮点数,表示这个二维数组,其中第 i+1行的第 j+1个数表示数组元素 M[i][j]。

输出格式

输出一个数,表示所求的平均数或和的值,保留一位小数。

数据范围

−100.0≤M[i][j]≤100.0

输入样例:
S
-6.0 0.7 -8.4 -5.7 -4.1 7.6 9.5 -9.7 4.1 0.6 -6.5 -4.9
6.6 4.9 -3.1 5.3 0.3 -4.5 3.9 -1.5 6.6 7.0 5.1 2.5
-8.5 1.8 -2.7 0.1 -4.9 -7.2 4.3 6.0 -1.4 2.7 -3.0 2.0
4.8 -7.0 -1.3 0.8 1.0 4.5 -1.1 -2.9 -3.9 -3.9 -8.9 5.8
-2.1 -9.6 5.1 0.2 1.0 -1.7 6.4 4.1 2.8 -6.9 2.4 9.3
-6.0 -9.1 -7.0 -7.0 7.8 5.1 6.9 -7.6 0.4 -7.2 5.5 6.0
-1.9 5.5 1.9 -8.5 -5.3 2.3 -9.3 2.0 -0.2 1.2 5.6 -1.8
8.2 2.3 3.5 1.4 4.0 -5.1 -6.9 -2.8 1.7 -7.0 7.8 1.8
-6.0 -4.1 -4.6 -9.4 -4.9 -4.1 4.2 6.3 -2.8 8.7 8.1 -0.9
8.8 -6.5 -4.3 6.1 -6.2 -3.9 -7.0 7.3 5.0 -0.9 -0.0 5.6
-2.4 1.4 8.5 -2.2 0.9 5.3 3.6 8.8 -8.1 3.0 -3.1 6.5
-3.8 -6.4 2.3 4.2 -9.8 -0.3 -9.9 -7.4 3.5 1.5 -0.2 7.0
输出样例:
-11.9

参考代码:

#include <iostream>
using namespace std;
int main()
{char s;cin>>s;double a[12][12];double sum=0;int count=0;for(int i=0;i<12;i++){for(int j=0;j<12;j++){cin>>a[i][j];}}
//绿色部分7-11行,列起始为12-i(当前行),小于行-1;for(int i=7;i<=11;i++){for(int j=12-i;j<=i-1;j++){sum+=a[i][j];count++;}}if(s=='M') printf("%.1lf",sum/count);else printf("%.1lf",sum);return 0;
}

17.数组的右方区域

输入一个二维数组 M[12][12],根据输入的要求,求出二维数组的右方区域元素的平均值或元素的和。

数组的两条对角线将数组分为了上下左右四个部分,如下图所示,黄色部分为对角线,绿色部分为右方区域:

UOJ_1190.png

输入格式

第一行输入一个大写字母,若为 S,则表示需要求出右方区域的元素的和,若为 M,则表示需要求出右方区域的元素的平均值。

接下来 12行,每行包含 12 个用空格隔开的浮点数,表示这个二维数组,其中第 i+1行的第 j+1个数表示数组元素 M[i][j]。

输出格式

输出一个数,表示所求的平均数或和的值,保留一位小数。

数据范围

−100.0≤M[i][j]≤100.0

输入样例:
S
2.4 7.8 9.4 -5.6 6.9 -4.9 4.8 0.8 3.6 1.7 -1.4 9.7
-6.8 -3.7 -2.0 -4.9 -4.5 -5.3 6.1 7.5 -4.3 5.9 -9.5 9.7
-6.5 -0.4 1.6 3.7 -4.4 -3.3 1.9 7.7 -1.4 4.5 7.4 -3.0
-1.2 0.4 9.8 9.8 -4.3 -1.3 -1.6 0.5 2.8 -4.0 8.5 3.9
0.2 -2.0 -6.4 -9.8 3.7 -2.0 1.7 -3.6 -3.4 2.4 -1.2 -3.9
-8.3 5.8 -1.0 -4.4 1.0 -2.4 2.8 -4.6 2.1 8.7 -6.8 -8.3
6.3 -6.8 -7.0 9.3 -7.7 -1.7 8.2 -6.5 -1.8 6.7 8.2 4.4
0.4 8.6 -1.2 8.6 -4.6 1.8 9.6 1.6 2.0 -1.0 3.9 -9.2
7.5 -3.1 6.2 -4.5 -3.0 2.5 -7.7 2.9 0.3 3.3 -2.7 3.4
-5.0 3.0 -0.0 4.3 9.5 -0.0 -9.9 -8.6 -0.9 -5.5 7.7 6.5
4.9 -9.6 -2.9 8.5 2.0 -9.9 -4.9 -1.5 -2.4 -7.6 1.7 8.5
-6.4 6.8 -3.7 -4.7 0.2 5.8 -5.4 0.6 7.0 -4.2 -7.5 -2.4
输出样例:
40.9

 参考代码:

#include <iostream>
using namespace std;
int main()
{char s;cin>>s;double a[12][12];for(int i=0;i<12;i++){for(int j=0;j<12;j++){cin>>a[i][j];}}double sum=0; int count=0;
//统计前五行,每行起始12-行数,小于等于11for(int i=1;i<=5;i++){for(int j=12-i;j<=11;j++){sum+=a[i][j];count++;}}
//统计后五行,每行起始行数+1,小于等于11for(int i=6;i<=10;i++){for(int j=i+1;j<=11;j++){sum+=a[i][j];count++;}}if(s=='M') printf("%.1lf",sum/count);else printf("%.1lf",sum);return 0;
}

*18.平方矩阵 II

输入整数 N,输出一个 N 阶的二维数组。

数组的形式参照样例。

输入格式

输入包含多行,每行包含一个整数 N。

当输入行为 N=0 时,表示输入结束,且该行无需作任何处理。

输出格式

对于每个输入整数 N,输出一个满足要求的 N 阶二维数组。

每个数组占 N行,每行包含 N 个用空格隔开的整数。

每个数组输出完毕后,输出一个空行。

数据范围

0≤N≤100

输入样例:
1
2
3
4
5
0
输出样例:
11 2
2 11 2 3
2 1 2
3 2 11 2 3 4
2 1 2 3
3 2 1 2
4 3 2 11 2 3 4 5
2 1 2 3 4
3 2 1 2 3
4 3 2 1 2
5 4 3 2 1

 参考代码:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{int n;while(cin>>n,n){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<<abs(i-j)+1<<" ";      }cout<<endl;}cout<<endl;}return 0;
}

*19.平方矩阵 III

输入整数 N,输出一个 N 阶的二维数组 M。

这个 N 阶二维数组满足 M[i][j]=2i+j。

具体形式可参考样例。

输入格式

输入包含多行,每行包含一个整数 N。

当输入行为 N=0 时,表示输入结束,且该行无需作任何处理。

输出格式

对于每个输入整数 N,输出一个满足要求的 N 阶二维数组。

每个数组占 N 行,每行包含 N 个用空格隔开的整数。

每个数组输出完毕后,输出一个空行。

数据范围

0≤N≤15

输入样例:
1
2
3
4
5
0
输出样例:
11 2
2 41 2 4
2 4 8
4 8 161 2 4 8
2 4 8 16
4 8 16 32
8 16 32 641 2 4 8 16
2 4 8 16 32
4 8 16 32 64
8 16 32 64 128
16 32 64 128 256

参考代码: 

#include <iostream>
#include <cstdio>using namespace std;int main()
{int n;while (cin >> n, n){for (int i = 0; i < n; i ++ ){for (int j = 0; j < n; j ++ ){int v = 1;for (int k = 0; k < i + j; k ++ ) v *= 2;cout << v << ' ';}cout << endl;}cout << endl;}return 0;
}

 *20.蛇形矩阵

输入两个整数 n 和 m,输出一个 n 行 m列的矩阵,将数字 1 到 n×m 按照回字蛇形填充至矩阵中。

具体矩阵形式可参考样例。

输入格式

输入共一行,包含两个整数 n和 m。

输出格式

输出满足要求的矩阵。

矩阵占 n 行,每行包含 m 个空格隔开的整数。

数据范围

1≤n,m≤100

输入样例:
3 3
输出样例:
1 2 3
8 9 4
7 6 5

 参考代码:

#include <iostream>
using namespace std;
int s[100][100];
int main()
{int n,m;cin>>n>>m;int dx[] = {0,1,0,-1},dy[] = {1,0,-1,0};for(int x=0,y=0,d=0,k=1;k<=m*n;k++){s[x][y]=k;int a=x+dx[d],b=y+dy[d];if(a<0 || a>=n || b<0 || b>=m || s[a][b]){d=(d+1)%4;a=x+dx[d],b=y+dy[d];}x=a,y=b;}for(int i=0;i<n;i++){for(int j=0;j<m;j++) cout<<s[i][j]<<" ";cout<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka接收消息

文章目录 Acknowledgment读消息指定分区批量消费消息拦截 // 采用监听得方式接收 Payload标记消息体内容. KafkaListener(topics {"test"},groupId "hello") public void onEvent(Payload String event,Header(value KafkaHeaders.RECEIVED_TOPIC) Stri…

服务重启时容器未自动启动

1、容器重启策略 通过设置容器的重启策略&#xff0c;‌可以决定在容器退出时Docker守护进程是否重启该容器。‌常见的重启策略包括&#xff1a;‌ no&#xff1a;‌不重启容器&#xff0c;‌默认策略。‌always&#xff1a;‌无论容器是如何退出的&#xff0c;‌总是重启容器…

2024 辽宁省大学数学建模竞赛A题 风切变影响及处置 完整思路 代码结果分享(仅供学习)

风切变对航空安全会构成危害。航空人员需了解相关知识&#xff0c;掌握相应技术&#xff0c;从而在遭遇上述天气时最大程度的规避风险&#xff0c;保证飞行安全。 风切变是指在大气中相对比较短的距离内或时间段内产生的风速大小、方向大幅度变化的现象。通常将发生在距离地面…

白话无人驾驶:1风暴来袭

----->更多内容&#xff0c;请移步“鲁班秘笈”&#xff01;&#xff01;<----- 根据最新的消息&#xff0c;在2024世界人工智能大会上&#xff0c;上海发放了首批完全无人驾驶智能网联汽车示范应用许可&#xff0c;即“完全无人载人车牌照”。首批获得许可的企业包括Au…

mysql 字段为json字符串,转对象然后赛选查询案例

sql 案例 SELECT JSON_UNQUOTE(JSON_EXTRACT(remark, $.deviceIp)) AS ip FROM intellect_identify_camera where JSON_UNQUOTE(JSON_EXTRACT(remark, $.deviceIp)) 127.0.0.1 ;

外国程序猿是什么水平?印度/越南/泰国/菲律宾

外国程序猿是什么水平? 中国互联网企业在海外扩张中,会遇到哪些困难和问题? 文化的差异本地法律法规的问题产品定位的问题人员招聘的问题等等…… 文化的差异和法律法规只能去适应,产品定位可以做调研,参考竞争对手和竞品。 人呢?这是最不可控的因素! 这里所说的人肯定…

mybatis语法进阶1

日志的使用 我们在使用MyBatis的时候, 其实MyBatis框架会打印一些必要的日志信息, 在开发阶段这些日志信息对我们分析问题,理解代码的执行是特别有帮助的; 包括项目上线之后,我们也可以收集项目的错误日志到文件里面去; 所以我们采用专门的日志系统来处理. 步骤 导入坐标拷贝…

阿里云人工智能平台PAI论文入选OSDI ‘24

近日&#xff0c;阿里云人工智能平台PAI的论文《Llumnix: Dynamic Scheduling for Large Language Model Serving》被OSDI 24录用。论文通过对大语言模型&#xff08;LLM&#xff09;推理请求的动态调度&#xff0c;大幅提升了推理服务质量和性价比。 Llumnix是业界首个能灵活在…

第一次构建一个对话机器人流程解析(一)

1.问答机器人的组成 1.1 问答机器人的组成结构图 2. 问答机器人的组成-机器人的个人属性 所谓的机器人一般具备有个人的属性&#xff0c;这些属性固定&#xff0c;形成了机器人的个人偏好 在实现过程中&#xff0c;此处使用一个xml配置文件&#xff0c;配置了机器人的个人年…

如何选购一台云服务器

说明&#xff1a;基于博主本人经常在用云服务学习技术&#xff0c;许多博客里的技术分享也都是在自己购买的云服务器上操作的&#xff0c;本文介绍根据自己的经验&#xff0c;如何选购一台云服务器 选择产商 云服务可以选择阿里云、华为云、腾讯云、百度云&#xff0c;都是几…

296个地级市GDP相关数据(2000-2023年)

GDP相关数据&#xff1a;衡量地区经济活动的综合指标 国内生产总值&#xff08;GDP&#xff09;是衡量一个国家或地区经济规模和发展水平的核心指标。它反映了在一定时期内&#xff0c;所有常住单位生产活动的最终成果。 GDP的种类及其含义&#xff1a; 名义GDP&#xff1a;按…

昆明高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

昆明高校大学智能制造实验室的数字孪生可视化系统平台建设项目&#xff0c;正是在这样的背景下应运而生。项目自启动以来&#xff0c;便受到了校方的高度重视和大力支持。经过数月的紧张筹备和精心实施&#xff0c;项目团队克服了种种技术难题&#xff0c;成功完成了系统的开发…

热题系列9

剑指 Offer 39. 数组中出现次数超过一半的数字 给一个长度为 n 的数组&#xff0c;数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次&#xff0c;超过数组长度的一半&am…

用 Kotlin 编写四则运算计算器:从零开始的简单教程

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

AI搜索助手心流正式上线 小程序版本、APP版本也将推出

7月10日&#xff0c;专为科研人员、高校教师和学生、职场人士研发的大模型应用产品心流正式上线。据了解&#xff0c;其产品定位为用户的AI搜索助手&#xff0c;提供智能搜索、知识问答、智能阅读、辅助创作等能力&#xff0c;旨在帮助用户提升工作和学习效率。 心流支持AI搜索…

AI绘画:midjourney快速生成符合心意的AI人物形象

生成人物的万能句式&#xff0c;包含**「人物的客观描述」「视角」「角度」「距离」「表情」「服装」「风格」「光源」**等内容&#xff0c;也可以只取其中部分的也会得到一个还不错的结果。 人物构图视角的选择 视角可以按照相机相对于被拍摄对象的位置&#xff0c;分为 正面…

微信小程序毕业设计-报刊订阅系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

网络(二)——套接字编程

文章目录 理解源IP地址和目的IP地址认识端口号认识TCP/UDP协议网络字节序socket编程接口socket 常见APIsockaddr结构 理解源IP地址和目的IP地址 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址&#xff1b; 源IP即发送方的地址&#xff0c;目的IP即接受方的…

免费开源数字人生成工具

使用步骤更是简单到不行&#xff1a; 1. 输入图片&#xff1a;选择你想要生成动态视频的肖像图片。 2. 输入音频&#xff1a;提供与图片匹配的音频文件&#xff0c;EchoMimic会根据音频内容驱动肖像的动态效果。 3. 设置参数&#xff1a;一般保持默认设置即可&#xff0c;当然&…

【银河麒麟服务器操作系统】系统夯死分析及处理建议

了解银河麒麟操作系统更多全新产品&#xff0c;请点击访问麒麟软件产品专区&#xff1a;https://product.kylinos.cn 服务器环境以及配置 【机型】物理机 处理器&#xff1a; Intel 内存&#xff1a; 512G 整机类型/架构&#xff1a; X86_64 【内核版本】 4.19.90-25…