文章目录
- DAY2
- 杨辉三角
- 查找整数
- 数列特征
- 字母图形(未通过全部样例)
DAY2
杨辉三角
【题目描述】
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
11 11 2 1
1 3 3 1
给出n,输出它的前n行。
【输入格式】
输入包含一个数n。
【输出格式】
输入杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
【输入样例】
4
【输出样例】
1
1 1
1 2 1
1 3 3 1
【数据规模与约定】
1 <= n <= 34
【解题思路】
使用二维数组,先将每个一维数组的第一个数和最后一个数都设置为1,然后根据三角形中的每个数等于它两肩膀数字的和的特性进行计算。
【C++程序代码】
方法一:使用数组
#include<iostream>
#include<string>using namespace std;int main()
{int n;cin >> n;int arr[34][34] = { 0 };for (int i = 0; i < 34; i++){arr[i][0] = arr[i][i] = 1;}for (int i = 2; i < 34; i++){for (int j = 1; j < i; j++){arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];}}for (int i = 0; i < n; i++){for (int j = 0; j <= i; j++){cout << arr[i][j] << ' ';}cout << endl;}return 0;
}
方法二:使用vector容器
#include<iostream>
#include<vector>
using namespace std;int main()
{int n;cin >> n;vector<vector<int>> vv(n);for (int i = 0; i < n; i++){vv[i].resize(i + 1, 1);}for (int i = 2; i < n; i++){for (int j = 1; j < i; j++){vv[i][j] = vv[i - 1][j - 1] + vv[i - 1][j];}}for (int i = 0; i < n; i++){for (int j = 0; j <= i; j++){cout << vv[i][j] << ' ';}cout << endl;}return 0;
}
查找整数
【题目描述】
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
【输入格式】
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
【输出格式】
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
【输入样例】
6
1 9 4 8 3 9
9
【输出样例】
2
【数据规模与约定】
1 <= n <= 1000
【解题思路】
将数列的数字逐个输入进容器中,然后再逐个进行对比
【C++程序代码】
#include<iostream>
#include<vector>using namespace std;int main()
{int n;cin >> n;vector<int> v(n);for (int i = 0; i < n; i++){int tmp;cin >> tmp;v[i] = tmp;}int findNum;cin >> findNum;int i;for (i = 0; i < n; i++){if (v[i] == findNum){break;}}if (i == n){cout << -1;}else{cout << ++i;}cout << endl;return 0;
}
数列特征
【题目描述】
给出n个数,找出这n个数的最大值,最小值,和。
【输入格式】
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
【输出格式】
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
【输入样例】
5
1 3 -2 4 5
【输出样例】
5
-2
11
【数据规模与约定】
1 <= n <= 10000
【解题思路】
题目规定了输入的数字的绝对值都小于-10000,所有设最大值和最小值分别为正负10000,只要有大于或者小于的就进行替换。
【C++程序代码】
#include<iostream>
#include<vector>
using namespace std;int main()
{int n;cin >> n;vector<int> v(n);int sum = 0;int max = -10000;int min = 10000;for (int i = 0; i < n; i++){cin >> v[i];sum += v[i];if (v[i] > max){max = v[i];}if (v[i] < min){min = v[i];}}cout << max << endl;cout << min << endl;cout << sum << endl;return 0;
}
字母图形(未通过全部样例)
【题目描述】
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
【输入格式】
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
【输出格式】
输出n行,每个m个字符,为你的图形。
【输入样例】
5 7
【输出样例】
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
【数据规模与约定】
1 <= n <= 10000
【解题思路】
用一个容器先输入第一行的所有字符,通过观看样例输出我们可以得出结论,根据行号的变化,每次前n个字符+1,后m-n个字符+1。
【C++程序代码】
#include<iostream>
#include<vector>using namespace std;int main()
{int n, m;cin >> n >> m;vector<char> v(m);for (int i = 0; i < m; i++){v[i] = 'A' + i;}for (int i = 0; i < n; i++){if (i > 0){for (int j = 0; j < i; j++){v[j]++;}for (int j = i; j < m; j++){v[j]--;}}for (int j = 0; j < m; j++){cout << v[j] << " ";}cout << endl;}return 0;
}