《C++程序设计实践》实验6

《C++程序设计实践》实验6
一、课内实验题(共10小题,100分)
题型得分 100
【描述】
编写程序,以左下三角的形式输出前n行杨辉三角形。
【输入】
输入在一行中给出n(1≤n≤10)。
【输出】
以左下三角的格式输出前n行杨辉三角形。每个数字占固定4位。
【输入示例】

5
【输出示例】
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
【来源】
《程序设计基础——以C++为例》第4章实验7。

(10分)
我的答案:
#include
#include
#include
#include

#include<stdio.h>
#include
#include
#include
#include
#include
#include
#include<math.h>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
#define f first
#define s second
#define pb push_back
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define int long long
#define cal(x) (((int)(x))*((x)+1)/2)
#define decimal(x) cout << fixed << setprecision(x);
const ll N = 1e5 + 7;
const ll mod = 1e9 + 7;
const ll maxn = 1e3 + 7;
const ll Mod = 998244353;
const ll inf = 1e9 * 1e9;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
int qpow(int a, int b) {
int res = 1;
while (b) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
int comb(int n, int m) {
if (n <= 0 || m < 0 || n < m) return 0;
int ans = 1, ant = 1;
for (int i = 0; i < m; i++) ans = (ans * (n - i)) % mod;
for (int i = 1; i <= m; i++) ant = (ant * i) % mod;
return ans * qpow(ant, mod - 2) % mod;
}
int a[maxn][maxn];
void solve() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
if (j == 1 || j == i) {
a[i][j] = 1;
cout << " " << 1;
}
else {
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
cout << " " << a[i][j];
}
}
cout << endl;
}
}
signed main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int _ = 1;
//cin >> ;
while (
–) {
solve();
}
}
题目得分 10
【描述】
输入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
(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[100100],k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
cout<<a[n-k+1];
}
题目得分 10
【描述】
输入一个正整数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
【提示】
用二维数组表示n×n矩阵时(i表示行下标,j表示列下标),则:
主对角线i==j,副对角线i + j == n – 1。
上三角矩阵i<=j。
下三角矩阵i>=j。
【来源】
《程序设计基础——以C++为例》第4章实验5。

(10分)
我的答案:
#include <stdio.h>
int main(void)
{
int a[20][20],flag,i,j,n;

scanf(“%d”,&n);

for (i=0;i<n;i++)
for (j=0;j<n;j++)
scanf(“%d”,&a[i][j]);
flag=1;
for (i=0;i<n;i++)
for (j=0;j<i;j++)
if(a[i][j]!=0)
flag=0;
if(flag)
printf(“Yes\n”);
else
printf(“No\n”);
return 0;
}
题目得分 10
【描述】
中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数或最中间两个数据的平均值(如果这组数的个数为奇数,则中位数为位于中间位置的那个数;如果这组数的个数为偶数,则中位数是位于中间位置的两个数的平均值)。
给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可。
【输入】
包含多组测试数据,每一组测试数据的第一行为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
(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin>>n){
if(n==0)return 0;
int a[100010];
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1);
cout<<(a[(n+1)/2]+a[(n+2)/2])/2<<endl;
}
}
题目得分 10
【描述】
编写程序,创建一个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
【来源】
《程序设计基础——以C++为例》第4章实验6。
(10分)
我的答案:
#include
#include
#include
#include

#include<stdio.h>
#include
#include
#include
#include
#include
#include
#include<math.h>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
#define f first
#define s second
#define pb push_back
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define int long long
#define cal(x) (((int)(x))*((x)+1)/2)
#define decimal(x) cout << fixed << setprecision(x);
const ll N = 1e5 + 7;
const ll mod = 1e9 + 7;
const ll maxn = 1e3 + 7;
const ll Mod = 998244353;
const ll inf = 1e9 * 1e9;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
int qpow(int a, int b) {
int res = 1;
while (b) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
int comb(int n, int m) {
if (n <= 0 || m < 0 || n < m) return 0;
int ans = 1, ant = 1;
for (int i = 0; i < m; i++) ans = (ans * (n - i)) % mod;
for (int i = 1; i <= m; i++) ant = (ant * i) % mod;
return ans * qpow(ant, mod - 2) % mod;
}
int a[maxn][maxn];
void solve() {
int n, m;
cin >> n >> m;
int p = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
for (int i = 1; i <= n; i++) {
int ans = 0;
int x = 0, y = 0;
for (int j = 1; j <= m; j++) {
if (a[i][j] > ans) {
ans = a[i][j];
x = i;
y = j;
}
}
int flag = 0;
for (int k = 1; k <= n; k++) {
if (a[k][y] < ans) {
flag = 1;
break;
}
}
if (!flag) {
p = 1;
cout << x - 1 << " " << y - 1 << " " << ans << endl;
}
}
if (!p) {
cout << “No saddle point” << endl;
}
}
signed main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int _ = 1;
//cin >> ;
while (
–) {
solve();
}
}
题目得分 10
【描述】
给定一组整数,要求利用数组把这组数保存起来,实现对数组中的数循环移动。假定共有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

(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,a[10010];
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];

for(int i=n-m+1;i<=n;i++)cout<<a[i]<<" ";
for(int i=1;i<=n-m;i++)cout<<a[i]<<" ";

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

735
【输出示例】
7
0
1
1
1
0
【来源】
《程序设计基础——以C++为例》第4章实验2。

(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
cout<<n/100<<endl;
n%=100;
cout<<n/50<<endl;
n%=50;
cout<<n/20<<endl;
n%=20;
cout<<n/10<<endl;
n%=10;
cout<<n/5<<endl;
n%=5;
cout<<n;
}
题目得分 10
【描述】
编写程序,输入10个数,计算这10个数的均值和标准偏差。用下面的公式计算均值mean和标准偏差deviation:

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

583 566 58 632 244 485 600 432 88 562
【输出示例】
425
216.476
【来源】
《程序设计基础——以C++为例》第4章实验4。

(10分)
我的答案:
double mean(const double x[], int arraySize){
double sum=0;
for(int i=0;i<arraySize;i++){
sum+=x[i];
}
return sum/arraySize;
}
double deviation(const double x[], int arraySize){
double sum=0.0;
for(int i=0;i<arraySize;i++){
sum+=x[i];
}
double mean=sum/arraySize;
double sum2=0.0;
for(int i=0;i<arraySize;i++){
sum2+=(x[i]-mean)*(x[i]-mean);
}
return sqrt(sum2/(arraySize-1));
}
题目得分 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
(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[100][100],cnt=0;
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)cin>>a[i][j];
for(int i=2;i<n;i++)
for(int j=2;j<n;j++){
if(a[i][j]+50<=a[i-1][j]&&a[i][j]+50<=a[i+1][j]&&a[i][j]+50<=a[i][j-1]&&a[i][j]+50<=a[i][j+1])cnt++;
}
cout<<cnt;
}
题目得分 10
【描述】
输入10个整数,存放在一维数组中,找出值最大和最小的元素,输出最大值、最小值及它们所在的元素下标。
【输入】
在一行中输入10个整数,整数以空格间隔。
【输出】
第一行输出最大值及其所在的元素下标,最大值和下标以空格间隔。
第二行输出最小值及其所在的元素下标,最小值和下标以空格间隔。
【输入示例】

1 3 5 7 9 6 0 8 2 4
【输出示例】
9 4
0 6
【来源】
《程序设计基础——以C++为例》第4章实验1。
(10分)
我的答案:
#include<bits/stdc++.h>
using namespace std;
int main(){
int x,amax=0,xx,yy,amin=0x3f3f;
for(int i=0;i<10;i++){
cin>>x;
if(x>amax)xx=i,amax=x;
if(x<amin)yy=i,amin=x;
}
cout<<amax<<" “<<xx<<endl<<amin<<” "<<yy;
}
题目得分 10

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值