西北工业大学_2011___考研计算机_复试上机

来源:互联网 发布:南宁java招聘 编辑:程序博客网 时间:2024/04/29 15:03

1,杨辉三角形

题目描述:

输入n值,使用递归函数,求杨辉三角形中各个位置上的值。

输入:

一个大于等于2的整型数n

输出:

题目可能有多组不同的测试数据,对于每组输入数据,
按题目的要求输出相应输入n的杨辉三角形。

样例输入:
6
样例输出:
1 11 2 11 3 3 11 4 6 4 11 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阶方阵.

输出:

调整后的方阵

样例输入:
43 6 8 76 7 5 38 6 5 39 8 7 2
样例输出:
9 8 7 26 7 5 33 6 8 78 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

样例输入:
abcdef
样例输出:
afbecd
总结:1,字符串长度不确定的时候最好还是要使用char【】。 2,好像考虑多了,题目的两个字符串等长。

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


0 0
原创粉丝点击