hznu.dodo C++ 实验五 数组

1.

【描述】
输入10个整数,存放在一维数组中,找出值最大和最小的元素,输出最大值、最小值及它们所在的元素下标。
【输入】
在一行中输入10个整数,整数以空格间隔。
【输出】
第一行输出最大值及其所在的元素下标,最大值和下标以空格间隔。
第二行输出最小值及其所在的元素下标,最小值和下标以空格间隔。
【输入示例】

1 3 5 7 9 6 0 8 2 4

【输出示例】

9 4
0 6
#include<iostream>
#include<cmath>
#include<string>
#include<iomanip>
using namespace std;

int main(){
    int arr[10];
    for(int i=0;i<10;i++){
        cin >> arr[i];
    }
    int max_count=arr[0],max_index=0,min_count=arr[0],min_index=0;
    for(int i=0;i<10;i++){
        if(arr[i] >= max_count){
            max_count = arr[i];
            max_index = i;
        }
        if(arr[i] <= min_count){
            min_count = arr[i];
            min_index = i;
        }
    }
    cout << max_count << " " << max_index << endl << min_count << " " << min_index << endl;
    return 0;
}

2.

【描述】
输入一指定金额(以元为单位),然后输出支付该金额的各种面额的人民币数量,显示100元,50元,20元,10元,5元,1元各多少张,要求尽量使用大面额的。
【输入】
输入一个小于1000的正整数。
【输出】
分行输出,每行显示一个整数,从上到下分别表示100元,50元,20元,10元,5元,1元人民币的张数。
【输入示例】

735

【输出示例】

7
0
1
1
1
0
#include<iostream>
#include<cmath>
#include<string>
#include<iomanip>
using namespace std;


int main(){
    int n;
    cin >> n;
    int arr[6] = {100,50,20,10,5,1};
    int counts[6] = {0};

    for(int i=0;i<6;i++){
        counts[i] = n / arr[i];
        n %= arr[i];
    }
    for(int i=0;i<6;i++){
        cout << counts[i] << endl;
    }
    return 0;
}

3.

【描述】
给定一组整数,要求利用数组把这组数保存起来,实现对数组中的数循环移动。假定共有n个整数,则要使前面各数顺序向后移m个位置,并使最后m个数变为最前面的m个数。
要求只用一个数组的方式实现,一定要保证在输出结果时,输出的顺序和数组中数的顺序是一致的。
【输入】
第一行包含一个正整数n和一个正整数m,n和m以空格间隔。
第二行包含n个正整数,整数以空格间隔。
【输出】
依次输出经过循环移动后数组中元素值,元素值以空格间隔。
【输入示例】

11 4
15 3 76 67 84 87 13 67 45 34 45

【输出示例】

67 45 34 45 15 3 76 67 84 87 13
#include<iostream>
#include<cmath>
#include<string>
#include<vector>
#include<array>
#include<algorithm>
#include<iomanip>
using namespace std;
void reverseArray(vector<int>& arr,int start,int end){
    while(start < end){
        swap(arr[start],arr[end]);
        start++;
        end--;
    }
}
void rotateArray(vector<int>& arr,int n,int m){
    m = m % n;
    if(m==0) return;
    reverseArray(arr,0,n-m-1);
    reverseArray(arr,n-m,n-1);
    reverseArray(arr,0,n-1);
}
int main(){
    int n,m;
    cin >> n >> m;
    vector<int> arr(n);
    for(int i=0;i<n;i++){
        cin >> arr[i];
    }
    rotateArray(arr,n,m);
    for(int i=0;i<n;i++){
        cout << arr[i] << " ";
    }
    return 0;
}

4.

【描述】
输入n(1≤n≤100)个正整数(无序的),找出第k(k≤n)大的数。注意,第k大的数意味着从大到小排在第k位置的数。
【输入】
n
k
a1 a2 a3 a4...an
【输出】
b
【输入示例】

5
2
32 3 12 5 89

【输出示例】

32
#include<iostream>
#include<cmath>
#include<string>
#include<iomanip>
using namespace std;

int main(){
    int n,k;
    cin >> n >> k;
    int arr[n];
    for(int i=0;i<n;i++){
        cin >> arr[i];
    }
    for(int i=0;i<n-1;i++){
        for(int j=i+1;j<n;j++){
            if(arr[i] <= arr[j]){
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
    cout << arr[k-1];
    
    return 0;
}

5.

【描述】
中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数或最中间两个数据的平均值(如果这组数的个数为奇数,则中位数为位于中间位置的那个数;如果这组数的个数为偶数,则中位数是位于中间位置的两个数的平均值)。
给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可。
【输入】
包含多组测试数据,每一组测试数据的第一行为n,代表该组测试数据包含的数据个数,1≤n≤10000。
接着n行为n个数据。n为0时结束输入。
【输出】
输出中位数,每一组测试数据输出一行。
【输入示例】

4
10
30
20
40
3
40
30
50
4
1
2
3
4
0

【输出示例】

25
40
2
#include<iostream>
#include<cmath>
#include<string>
#include<iomanip>
using namespace std;

int main(){
    int n,k=-1;
    cin >> n;
    
    if(n == 0) cout << 0;
    else{
        while(n!=0){
            int arr[n];
            for(int i=0;i<n;i++){
                cin >> arr[i];
            }
            for(int i=0;i<n-1;i++){
                for(int j=i+1;j<n;j++){
                    if(arr[i] >= arr[j]){
                        int temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
            if(n % 2 == 0) cout << (arr[n /2] + arr[n/2 - 1])/2 << endl;
            else cout << arr[n/2] << endl;
            cin >> n;
        }
    }
    
    return 0;
}

6.

【描述】
编写程序,输入10个数,计算这10个数的均值和标准偏差。用下面的公式计算均值mean和标准偏差deviation:

【输入】
在第一行中给出10个数,数间以空格间隔。
【输出】
第一行为均值。
第二行为标准偏差。
【输入示例】

583 566 58 632 244 485 600 432 88 562

【输出示例】

425
216.476
#include <iostream>
#include <cmath>
using namespace std;
double mean(const double x[], int arraySize);
double deviation(const double x[], int arraySize);
int main() {
    const int ARRAY_SIZE = 10;
    double array[ARRAY_SIZE];
    for(int i = 0; i < ARRAY_SIZE; ++i)
        cin >> array[i];
    cout << mean(array, ARRAY_SIZE) << endl;
    cout << deviation(array, ARRAY_SIZE) << endl;
    return 0;
}
// 请在下面分别编写mean函数和deviation函数
double mean(const double x[],int arraySize){
    double sum_total = 0;
    for(int i=0;i<arraySize;i++){
        sum_total += x[i];
    }
    return sum_total/10.0;
}
double deviation(const double x[],int arraySize){
    double use_mean = mean(x,arraySize);
    double de_total = 0;
    for(int i=0;i<arraySize;i++){
        de_total += pow(x[i] - use_mean,2);
    }
    return sqrt(de_total/9.0);
}

7.

【描述】
输入一个正整数n(2≤n≤10)和n×n矩阵a中的元素,如果a是上三角矩阵,输出“Yes”,否则输出“No”。
【输入】
第一行为正整数n,表示矩阵大小。
接着n行,每一行n个整数,整数以空格间隔。
【输出】
输出“Yes”或“No”。
【输入示例】

3
3 4 5
1 2 3
1 3 4

【输出示例】

No
#include<iostream>
#include<cmath>
#include<string>
#include<iomanip>
using namespace std;


int main(){
    int n;
    cin >> n;
    int arr[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin >> arr[i][j];
        }
    }
    int judge = 1;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(i > j){
                if(arr[i][j] != 0){
                    judge = 0;
                    break;
                }
            }
        }
    }
    if(judge == 1) cout << "Yes" << endl;
    else cout << "No" << endl;
    return 0;
}

8.

【描述】
编写程序,创建一个m×n(2≤m、n≤10)的矩阵,输入矩阵的值,找出该矩阵的鞍点,鞍点是指本行最大、本列最小的元素,可能没有鞍点,也可能有多个鞍点。简单起见,只考虑一个鞍点和没有鞍点的情况。且保证矩阵中的值不会全相等。
【输入】
第一行输入矩阵的行列数m和n,以空格间隔。
接着按矩阵的行列数输入矩阵的值。
【输出】
按“行 列 鞍点值”的格式输出鞍点,若不存在鞍点,则输出“No saddle point”。
【输入示例】

3 4
41 89 31 39
96 94 15 20
40 96 86 11 

【输出示例】

0 1 89
#include <iostream>  
#include <vector>  
using namespace std;  

int main() {  
    int m, n;  
    cin >> m >> n;  
    
    vector<vector<int>> arr(m, vector<int>(n));  
    for (int i = 0; i < m; i++) {  
        for (int j = 0; j < n; j++) {  
            cin >> arr[i][j];  
        }  
    }  

    bool foundSaddlePoint = false;  

    for (int i = 0; i < m; i++) {  
        int maxRowValue = arr[i][0];  
        int maxColIndex = 0;  

        for (int j = 1; j < n; j++) {  
            if (arr[i][j] > maxRowValue) {  
                maxRowValue = arr[i][j];  
                maxColIndex = j;  
            }  
        }  
 
        bool isSaddlePoint = true;  
        for (int k = 0; k < m; k++) {  
            if (arr[k][maxColIndex] < maxRowValue) {  
                isSaddlePoint = false;  
                break; 
            }  
        }  
  
        if (isSaddlePoint) {  
            cout << i << " " << maxColIndex << " " << maxRowValue << endl;  
            foundSaddlePoint = true;  
            break; 
        }  
    }  
 
    if (!foundSaddlePoint) {  
        cout << "No saddle point" << endl;  
    }  
    return 0;  
}

9.

【描述】
编写程序,以左下三角的形式输出前n行杨辉三角形。
【输入】
输入在一行中给出n(1≤n≤10)。
【输出】
以左下三角的格式输出前n行杨辉三角形。每个数字占固定4位。
【输入示例】

5

【输出示例】

   1
   1   1
   1   2   1
   1   3   3   1
   1   4   6   4   1
#include<iostream>
#include<cmath>
#include<string>
#include<vector>
#include<array>
#include<algorithm>
#include<iomanip>
using namespace std;

int main(){
    int n;
    cin >> n;
    int triangle[10][10] = {0};
    for(int i=0;i<n;i++){
        triangle[i][0] = 1;
        triangle[i][i] = 1;
        for(int j=1;j<i;j++){
            triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<=i;j++){
            cout << setw(4) << triangle[i][j];
        }
        
        if(i<n-1) cout << endl;
    }
    
    return 0;
}


10.

【描述】
拍摄的一张CT照片用一个二维数组来存储,假设数组中的每个点代表一个细胞。每个细胞的颜色用0到255之间(包括0和255)的一个整数表示。定义一个细胞是异常细胞,如果这个细胞的颜色值比它上下左右4个细胞的颜色值都小50以上(包括50)。数组边缘上的细胞不检测。现在的任务是,给定一个存储CT照片的二维数组,写程序统计照片中异常细胞的数目。
【输入】
第一行包含一个整数n(2<n≤100)。
下面有n行,每行有n个0~255之间的整数,整数以空格间隔。
【输出】
输出一个整数,即异常细胞的数目。
【输入示例】

4
70 70 70 70
70 10 70 70
70 70 20 70
70 70 70 70

【输出示例】

2
#include<iostream>
#include<cmath>
#include<string>
#include<vector>
#include<array>
#include<algorithm>
#include<iomanip>
using namespace std;

int main(){
    int n;
    cin >> n;
    int arr[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin >> arr[i][j];
        }
    }
    int count = 0;
    for(int i=1;i<n-1;i++){
        for(int j=1;j<n-1;j++){
            if(arr[i-1][j]-arr[i][j]>=50 &&arr[i+1][j]-arr[i][j]>=50 && arr[i][j-1]-arr[i][j]>=50 && arr[i][j+1]-arr[i][j]>=50) count += 1; 
        }
    }
    cout << count;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值