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;
}