1,杨辉三角形
-
题目描述:
-
输入n值,使用递归函数,求杨辉三角形中各个位置上的值。
-
输入:
-
一个大于等于2的整型数n
-
输出:
-
题目可能有多组不同的测试数据,对于每组输入数据,
按题目的要求输出相应输入n的杨辉三角形。
-
样例输入:
-
6
-
样例输出:
-
1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
#include<iostream>
#include<vector>
using namespace std;
vector<int> print_triangle(int n){
vector<int> re_vector;
//递归退出条件
if(n == 1){
re_vector.push_back(1);
re_vector.push_back(1);
}else{
//递归调用
vector<int> pre_level = print_triangle(n-1);
for(int i=0;i < pre_level.size();i++){
cout<<pre_level[i];
if(i != pre_level.size() - 1){
cout<<" ";
}else{
cout<<endl;
}
}
re_vector.push_back(1);
int p1 = 0;
int p2 = 1;
//n - - > 1表明其运行 n-2 次,中间有 n-2个元素需进行计算
while(n-->1){
re_vector.push_back(pre_level[p1]+pre_level[p2]);
p1++;
p2++;
}
re_vector.push_back(1);
}
return re_vector;
}
int main(){
int n;
while(cin>>n){
print_triangle(n);
}
return 0;
}
2,调整方阵
-
题目描述:
-
输入一个N(N<=10)阶方阵,按照如下方式调整方阵:
1.将第一列中最大数所在的行与第一行对调。
2.将第二列中从第二行到第N行最大数所在的行与第二行对调。
依此类推...
N-1.将第N-1列中从第N-1行到第N行最大数所在的行与第N-1行对调。
N.输出这个方阵
-
输入:
-
包含多组测试数据,每组测试数据第一行为一个整数N,表示方阵的阶数.
接下来输入这个N阶方阵.
-
输出:
-
调整后的方阵
-
样例输入:
-
4 3 6 8 7 6 7 5 3 8 6 5 3 9 8 7 2
-
样例输出:
-
9 8 7 2 6 7 5 3 3 6 8 7 8 6 5 3
#include<iostream>
using namespace std;
void adjust_mutex(int num[10][10],int c,int n){
int swap,i;
int max = c;
for(i=c;i<n;i++){
if(num[i][c] > num[max][c]){
max = i;
}
}
if(max != c){
for(i=0;i<n;i++){
swap = num[c][i];
num[c][i] = num[max][i];
num[max][i] =swap;
}
}
}
int main(){
int n,i,j;
int mutex[10][10];
while(cin>>n){
for(i=0;i<n;i++){
for(j=0;j<n;j++){
cin>>mutex[i][j];
}
}
for(i=0;i<n;i++){
adjust_mutex(mutex,i,n);
}
for(i=0;i<n;i++){
for(j=0;j<n-1;j++){
cout<<mutex[i][j]<<" ";
}
cout<<mutex[i][n-1]<<endl;
}
}
return 0;
}
3,合并符串
-
题目描述:
-
给定两个字符串S1和S2,合并成一个新的字符串S。
合并规则为,S1的第一个字符为S的第一个字符,将S2的最后一个字符作为S的第二个字符;
将S1的第二个字符作为S的第三个字符,将S2的倒数第二个字符作为S的第四个字符,以此类推。
-
输入:
-
包含多组测试数据,每组测试数据包含两行,代表长度相等的两个字符串S1和S2(仅由小写字母组成,长度不超过100)。
-
输出:
-
合并后的新字符串S
-
样例输入:
-
abc def
-
样例输出:
-
afbecd
#include<iostream>
#include<string>
using namespace std;
int main(){
string str1,str2;
char m_str[202];
int len1,len2;
int i,j,h;
while(cin>>str1 && cin>>str2){
len1 = str1.length();
len2 = str2.length();
h=0;
for(i=0,j=len2-1;i<len1 && j>=0;i++,j--){
m_str[h++] = str1[i];
m_str[h++] = str2[j];
}
if(i<len1){
for(i;i<len1;i++){
m_str[h++] = str1[i];
}
}
if(j>=0){
for(j;j>=0;j--){
m_str[h++] = str2[j];
}
}
for(i=0;i<h-1;i++){
cout<<m_str[i];
}
cout<<m_str[h-1]<<endl;
}
return 0;
}
4,求两个多项式的和
-
题目描述:
-
输入两个多项式,计算它们的和。
每个多项式有若干对整数表示,每组整数中,第一个整数表示系数(非0),第二个整数表示该项的次数。
如由3 3 5 -2 1 4 0表示3x^5 - 2 * x + 4其中第一个3表示该多项式由三个整数对表示。
-
输入:
-
输入为两行,分别表示两个多项式。表示每项的整数对按照次数大小降序给出。(次数绝对值小于1000,系数绝对值小于10000)
-
输出:
-
按照降次顺序输出表示和多项式的整数对(系数为0的整数对不用输出,整数对由空格分隔,最后一个整数对后不添加空格)
-
样例输入:
-
3 3 5 -2 1 4 0 4 2 3 -1 2 1 1 3 0
-
样例输出:
-
3 5 2 3 -1 2 -1 1 7 0
#include<iostream>
using namespace std;
int main(){
int i,j,n,m;
int x,c;
while(cin>>n){
int po1[2010]={0};
int po2[2010]={0};
int sum[2010]={0};
for(i=0;i<n;i++){
cin>>x>>c;
po1[c+1000] = x;
}
cin>>m;
for(i=0;i<m;i++){
cin>>x>>c;
po2[c+1000] = x;
}
for(i=0;i<2010;i++){
sum[i] = po1[i] + po2[i];
}
for(j=0;j<2010;j++){
if(sum[j] != 0){
break;
}
}
for(i=2009;i>j;i--){
if(sum[i] != 0){
cout<<sum[i]<<" "<<i-1000<<" ";
}
}
cout<<sum[j]<<" "<<i-1000<<endl;
}
return 0;
}