C/C++基础知识——数组、循环

简介: C/C++基础知识——数组、循环

1.数组的右上半部分

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

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

输入格式

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

接下来 12行,每行包含 12 个用空格隔开的浮点数,表示这个二维数组,其中第 i+1 行的第 j+1 个数表示数组元素 M[i][j]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<cstdio>
 
int main()
{
    double a[12][12];
    char c;
    scanf("%c",&c);
    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
        scanf("%lf",&a[i][j]);
        
    double sum=0;
    int d=0;
    
    for(int i=0;i<12;i++)
        for(int j=i+1;j<12;j++)
        {
            sum+=a[i][j];
            d++;
        }
    if(c=='S')printf("%.1lf\n",sum);
    else  printf("%.1lf\n",sum/d);
    return 0;
}

2.数组的左上半部分

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

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

输入格式

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

接下来 12行,每行包含 12 个用空格隔开的浮点数,表示这个二维数组,其中第 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<cstdio>
 
int main()
{
    char t;
    double a[12][12];
    scanf("%c",&t);
    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
        scanf("%lf",&a[i][j]);
        
    double sum=0;
    int c=0;
    for(int i=0;i<12;i++)
        for(int j=0;j<=10-i;j++)
        {
            c++;
            sum+=a[i][j];
            
        }
    if(t=='S')printf("%.1lf",sum);
    else printf("%.1lf",sum/c);
    
    return 0;
}

3.数组的上方区域:

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

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

输入格式

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

接下来 12 行,每行包含 12 个用空格隔开的浮点数,表示这个二维数组,其中第 i+1 行的第 j+1 个数表示数组元素 M[i][j]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<cstdio>
 
int main()
{
    char t;
    double a[12][12];
    scanf("%c",&t);
    
    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
        scanf("%lf",&a[i][j]);
     
    double n=0,s=0;   
    for(int i=0;i<=4;i++)
        for(int j=i+1;j<=10-i;j++)
        {
            s+=a[i][j];
            n++;
        }
    if(t=='S')printf("%.1lf",s);
    else printf("%.1lf",s/n);
    return 0;
}

4.数组的左方区域

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

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

输入格式

第一行输入一个大写字母,若为 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;
    double a[12][12];
    scanf("%c",&t);
    
    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
        scanf("%lf",&a[i][j]);
    
    double d,s;
    for(int i=0;i<=5;i++)
        for(int j=0;j<i;j++)
        {
            s+=a[i][j];
            d++;
        }
    for(int i=6;i<=10;i++)
        for(int j=0;j<=10-i;j++)
        {
            s+=a[i][j];
            d++;
        }    
    if(t=='S')printf("%.1lf",s);
    else printf("%.1lf",s/d);
    return 0;
}

5. 平方矩阵 I:

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

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

输入格式

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

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

输出格式

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

每个数组占 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;
}

6.斐波那契数列

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

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

输入格式

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

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

输出格式

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

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

数据范围

0≤N≤60

输入样例:

3

0

4

2

输出样例:

Fib(0) = 0

Fib(4) = 3

Fib(2) = 1

#include<cstdio>
 
long long  f[60];
 
int main()
{
    int n;
    scanf("%d",&n);
    f[0]=0,f[1]=1;
    for(int i=0;i<60;i++)
        f[i+2]=f[i+1]+f[i];
    
    while(n--)
    {
        int x;
        scanf("%d",&x);
        printf("Fib(%d) = %lld\n",x,f[x]);
    }
    
    return 0;
}

7.平方矩阵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<cstdio>
 
using namespace std;
 
int main()
{
    int n;
    int a[100][100];
    while(cin>>n,n--)
    {
        for(int i=0;i<=n;i++)
        {
            a[i][i]=1;
            for(int j=i+1,k=2;j<=n;j++,k++)a[j][i]=k;
            for(int j=i+1,k=2;j<=n;j++,k++)a[i][j]=k;
            
        }
        for(int i=0;i<=n;i++)
        {
            for(int j=0;j<=n;j++)
            {
                cout<<a[i][j]<<' ';
            }
            cout<<endl;
        }
        cout<<endl;
    }
    return 0;
}

还有一种规律是|i-j|+1

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


目录
相关文章
|
28天前
|
存储 算法 编译器
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
47 1
|
1月前
|
设计模式 测试技术 编译器
C++项目中打破循环依赖的锁链:实用方法大全(一)
C++项目中打破循环依赖的锁链:实用方法大全
78 0
|
1月前
|
存储 缓存 安全
C++数组全解析:从基础知识到高级应用,领略数组的魅力与技巧
C++数组全解析:从基础知识到高级应用,领略数组的魅力与技巧
53 1
|
1月前
|
编译器 C++
深入理解 C++ 语法:从基础知识到高级应用
了解C++基础语法,包括`#include &lt;iostream&gt;`引入输入输出库,`using namespace std`简化命名。`int main()`是程序入口,`cout &lt;&lt; &quot;Hello World!&quot;`用于输出文本。换行可使用`\n`或`endl`。注释使用`//`进行单行注释,`/* */`进行多行注释。
27 0
|
19天前
|
C++
C++ While 和 For 循环:流程控制全解析
本文介绍了C++中的`switch`语句和循环结构。`switch`语句根据表达式的值执行匹配的代码块,可以使用`break`终止执行并跳出`switch`。`default`关键字用于处理没有匹配`case`的情况。接着,文章讲述了三种类型的循环:`while`循环在条件满足时执行代码,`do/while`至少执行一次代码再检查条件,`for`循环适用于已知循环次数的情况。`for`循环包含初始化、条件和递增三个部分。此外,还提到了嵌套循环和C++11引入的`foreach`循环,用于遍历数组元素。最后,鼓励读者关注微信公众号`Let us Coding`获取更多内容。
19 0
|
27天前
|
算法 编译器 C++
【C++ 模板编程 基础知识】C++ 模板类部分特例化的参数顺序
【C++ 模板编程 基础知识】C++ 模板类部分特例化的参数顺序
21 0
|
1月前
|
设计模式 敏捷开发 持续交付
C++项目中打破循环依赖的锁链:实用方法大全(三)
C++项目中打破循环依赖的锁链:实用方法大全
47 0
|
1月前
|
测试技术 持续交付 API
C++项目中打破循环依赖的锁链:实用方法大全(二)
C++项目中打破循环依赖的锁链:实用方法大全
57 0
|
1月前
|
并行计算 编译器 程序员
提升C/C++编程效率:深入C/C++ for循环的优化与应用
提升C/C++编程效率:深入C/C++ for循环的优化与应用
63 0
|
1月前
|
存储 缓存 安全
【C/C++ 基础 数组容器比较】深入探究C++容器:数组、vector与array之间的异同
【C/C++ 基础 数组容器比较】深入探究C++容器:数组、vector与array之间的异同
15 0

热门文章

最新文章