C++ 语法习题(2)

news2024/11/14 19:08:46

                                               第三讲 循环语句

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的结果不等于0
        if(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<6
    for(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;
        else
            sum3+=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<n
        if(m>n) swap(m,n);
//求m到n所有数的和包括m和n
        for(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的值都小于11
            if(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
输出样例:
1

1 1
1 1

1 1 1
1 2 1
1 1 1

1 1 1 1
1 2 2 1
1 2 2 1
1 1 1 1

1 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)逆置->得到 54321
    reverse(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];
//绿色部分所有行坐标+列坐标都>12
            if(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-行数,小于等于11
    for(int i=1;i<=5;i++)
    {
       for(int j=12-i;j<=11;j++)
       {
           sum+=a[i][j];
           count++;
       }
    }
//统计后五行,每行起始行数+1,小于等于11
    for(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
输出样例:
1

1 2
2 1

1 2 3
2 1 2
3 2 1

1 2 3 4
2 1 2 3
3 2 1 2
4 3 2 1

1 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
输出样例:
1

1 2
2 4

1 2 4
2 4 8
4 8 16

1 2 4 8
2 4 8 16
4 8 16 32
8 16 32 64

1 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.coloradmin.cn/o/1910922.html

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

相关文章

玩具营销是如何拿捏成年人钱包?

好像现在的成年人逐渐热衷于偏向年轻化&#xff0c;问问题会好奇“尊嘟假嘟”&#xff0c;饭量上的“儿童套餐”&#xff0c;娃娃机前排长队......而最突出的莫过于各类各式的玩具不断收割当代年轻人&#xff0c;除去常给大朋友们小朋友们送去玩具福利的“麦、肯”双门&#xf…

数据分析中excel常用函数总结

1、相对引用&#xff0c;绝对引用和混合引用 相对引用&#xff1a;比如求和&#xff0c;当计算出一个求和值&#xff0c;其他的就可以向下填充&#xff0c;此时求和引用的行列会随着求和区域的行列变化而变化。 绝对引用&#xff1a; 对某一个引用区域进行锁定&#xff0c;让…

华为防火墙 拓扑搭建1

拓扑图 要求 1.DMZ区内的服务器&#xff0c;生产区仅能在办公时间内&#xff08;9&#xff1a;00-18&#xff1a;00&#xff09;可以访问&#xff0c;办公区设备全天可以访问 配置安全策略 设置办公时间 2.生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网…

【Mongodb-03】亿级数据从mysql迁移到mongodb辛酸历程

亿级数据从mysql迁移到mongodb辛酸历程 一&#xff0c;亿级数据从mysql迁移到mongodb辛酸历程1&#xff0c;核心业务和前期实现2&#xff0c;分库分表考虑3&#xff0c;nosql的选择4&#xff0c;mongodb服务器购买or自己搭建5&#xff0c;数据从mysq迁移到mongodb5.1&#xff0…

算法力扣刷题记录 三十八【二叉树的层次遍历应用一及二叉树构建】

前言 二叉树层序遍历应用题目。 记录三十八 【二叉树的层次遍历应用一】 继续。 一、【107.二叉树的层次遍历 II】 题目 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向…

如何解决英国Facebook直播网络延时问题?

许多商家在英国进行Facebook直播&#xff0c;但网络延时和卡顿问题常常困扰着用户。这不仅影响观众的观看体验&#xff0c;也会给商家带来巨大损失。本文将探讨解决英国Facebook直播网络延时和卡顿问题的方案&#xff0c;以促进业务发展并提升用户满意度。 海外直播的挑战 海外…

3GPP R18 Multi-USIM 是怎么回事?(三)

这篇内容相对来说都是一些死规定,比较枯燥。主要是与MUSIM feature相关的mobility and periodic registration和service request触发过程的一些规定,两部分的内容是有部分重叠的,为保证完整性,重复部分也从24.501中摘了出来。 24.501 4.25 网络和MUSIM UE可以支持MUSIM fe…

优劣分析:重启路由器 vs 使用IP代理

目前更换IP主要有两种常见方法&#xff0c;一种是重启路由器&#xff0c;另一种是使用代理IP&#xff0c;那么&#xff0c;这两种方法有什么优缺点呢&#xff1f;下面我们一起来探讨一下。 方法一&#xff1a;重启路由器变换IP 优点 1. 操作简单&#xff1a;只需断开路由器电…

头歌资源库(22)求组合数

一、 问题描述 二、算法思想 动态规划是一种将问题分解成子问题并保存子问题解以避免重复计算的算法思想。 对于组合数C(n, r)&#xff0c;我们可以将问题分解成子问题C(i, j)&#xff0c;其中i表示从1到n的选择数&#xff0c;j表示选择的元素个数。则C(n, r)可以通过求解C(i…

多标签问题

一、多标签问题与单标签问题的区别&#xff1a; 多标签问题是单标签问题的推广。 举个例子&#xff0c;同时识别图片中的小汽车&#xff0c;公交车&#xff0c;行人时&#xff0c;标签值有三个&#xff1a;小汽车&#xff0c;公交车&#xff0c;行人。 单标签问题仅对一个标签…

ASP.NET MVC Lock锁的测试

思路&#xff1a;我们让后台Thread.Sleep一段时间&#xff0c;来模拟一个耗时操作&#xff0c;而这个时间可以由前台提供。 我们开启两个或以上的页面&#xff0c;第一个耗时5秒(提交5000)&#xff0c;第二个耗时1秒(提交1000)。 期望的测试结果&#xff1a; 不加Lock锁&…

喝酒骰子夜店手灯轮盘扫雷鳄鱼拆弹你演我猜小游戏流量主小程序开源版开发

喝酒骰子夜店手灯轮盘扫雷鳄鱼拆弹你演我猜小游戏流量主小程序开源版开发 喝酒摇骰子、轮盘、扫雷大战、夜店手灯、鳄鱼拔牙、喝酒大叔、指尖光环、拆弹英雄、幸运转转转、你演我猜、眼疾手快、占领方块、你演我猜。 喝酒骰子类小程序通常包含多种互动游戏和娱乐功能&#xf…

音视频质量评判标准

一、实时通信延时指标 通过图中表格可以看到&#xff0c;如果端到端延迟在200ms以内&#xff0c;说明整个通话是优质的&#xff0c;通话效果就像大家在同一个房间里聊天一样&#xff1b;300ms以内&#xff0c;大多数人很满意&#xff0c;400ms以内&#xff0c;有小部分人可以感…

Qt常用基础控件总结—容器部件(QGroupBox类)

五、容器部件 按钮框控件QDialogButtonBox 类(很少用) 按钮组控件QButtonGroup 类(很少用) 组框控件QGroupBox 类 QGroupBox 类介绍 QGroupBox(组框),直接继承自 QWidget 类,因此使用该类创建的对象,可作为窗口使用,组框在外观上是可见的。 QGroupBox 类(组框),…

Odoo14使用hiPrint实现打印功能

使用hiPrint代替odoo原生的打印功能 可以实现快速自定义修改打印模板&#xff0c;无需每次都调整打印模板 无论是表单分页还是各种需求&#xff0c;都能满足 目录 1 使用命令创建新的模块&#xff0c;无用的demo文件可以删除掉 2 新建“打印模板”&#xff0c;用于保存打印…

AFT:Attention Free Transformer论文笔记

原文链接 2105.14103 (arxiv.org) 原文翻译 Abstract 我们介绍了 Attention Free Transformer (AFT)&#xff0c;这是 Transformer [1] 的有效变体&#xff0c;它消除了点积自注意力的需要。在 AFT 层&#xff0c;键key和值value首先与一组学习的位置偏差position biases相结…

海南云亿商务咨询有限公司助力品牌快速崛起

在数字化浪潮的推动下&#xff0c;电商行业日新月异&#xff0c;短视频平台更是成为品牌宣传和销售的新宠。海南云亿商务咨询有限公司&#xff0c;作为抖音电商服务的领军者&#xff0c;凭借其专业的团队和丰富的经验&#xff0c;助力众多品牌在抖音平台上实现了快速增长。 一…

通过rpmbuild构建Elasticsearch-7.14.2-search-guard的RPM包

系列文章目录 rpmbuild从入门到放弃 search-guard插件使用入门手册 文章目录 系列文章目录前言一、资源准备二、spec文件1.基础信息2.%prep3.%Install4.%file5.%post6.%postun 三、成果演示1.执行构建过程图示例2.执行安装RPM包示例3.进程检查4.访问esApi 总结 前言 不管是源…

Google AlphaGo 繁忙训练的一天

早晨&#xff1a;启动与准备 7:00 AM - 起床与准备 AlphaGo的研发团队成员早早起床&#xff0c;进行晨练活动&#xff0c;如跑步或瑜伽&#xff0c;保持身体健康和精力充沛。 8:30 AM - 到达工作场所 研发团队到达Google的办公室或远程工作站&#xff0c;启动设备&#xff…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十六章 Linux 第一个程序 HelloWorld

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…