1递归求二项式系数值
样例输入
一个满足题目要求的输入范例。 3 10
样例输出
与上面的样例输入对应的输出。
数据规模和约定
输入数据中每一个数的范围。 例:结果在int表示时不会溢出。
#include<iostream> using namespace std; int fun(int k,int n); int main() { int k,n; cin>>k>>n; cout<<fun(k,n)<<endl; } int fun(int k,int n) { if(k==0||k==n) return 1; if(k>0) return fun(k-1,n-1)*n/k; }2图形显示
问题描述
编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数): * * * * * * * * * * * * * * *
#include<iostream> using namespace std; int main() { int n,m; cin>>n; m=n; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cout<<"*"<<" "; } cout<<endl; m--; } }
3最小公倍数
问题描述
编写一函数lcm,求两个正整数的最小公倍数。
样例输入
一个满足题目要求的输入范例。 例: 3 5
样例输出
15
与上面的样例输入对应的输出 #include<iostream> using namespace std; int main() { int a,b,i=1; cin>>a>>b; while(i>=1) { if(i>=a&&i>=b&&i%a==0&&i%b==0) { cout<<i<<endl; break; } else ++i; } }
4逆序打印数字
基于例子4 ,写一个程序,在屏幕上打印: 9 8 7 6
5
#include<iostream> #include<string.h> using namespace std; int main() { char p[]="56789"; int len; len=strlen(p); for(int i=0,j=len-1;i<=len/2;i++,j--) { char p1; p1=p[i]; p[i]=p[j]; p[j]=p1; } for(int i=0;i<len;i++) cout<<p[i]<<endl; }
5 P1103
编程实现两个复数的运算。设有两个复数和 ,则他们的运算公式为: 要求:(1)定义一个结构体类型来描述复数。 (2)复数之间的加法、减法、乘法和除法分别用不用的函数来实现。 (3)必须使用结构体指针的方法把函数的计算结果返回。 说明:用户输入:运算符号(+,-,*,/) a b c d. 输出:a+bi,输出时不管a,b是小于0或等于0都按该格式输出,输出时a,b都保留两位。 输入: - 2.5 3.6 1.5 4.9 输出: 1.00+-1.30i
#include<iostream> #include<iomanip> #include<stdlib.h> using namespace std; struct complex{ double real; double virt; }; complex*add(complex*c1,complex*c2); complex*sub(complex*c1,complex*c2); complex*mul(complex*c1,complex*c2); complex*div(complex*c1,complex*c2); int main() { char c; complex r1,r2; complex *p1=&r1,*p2=&r2,*p3; cin>>c>>p1->real>>p1->virt>>p2->real>>p2->virt; if(c=='+'){ p3=add(p1,p2); cout<<setiosflags(ios::fixed)<<setprecision(2)<<p3->real<<"+"<<p3->virt<<"i"; } if(c=='-'){ p3=sub(p1,p2); cout<<setiosflags(ios::fixed)<<setprecision(2)<<p3->real<<"+"<<p3->virt<<"i"; } if(c=='*'){ p3=mul(p1,p2); cout<<setiosflags(ios::fixed)<<setprecision(2)<<p3->real<<"+"<<p3->virt<<"i"; } if(c=='/'){ p3=div(p1,p2); cout<<setiosflags(ios::fixed)<<setprecision(2)<<p3->real<<"+"<<p3->virt<<"i"; } return 0; } complex *add(complex*c1,complex*c2) { complex *p; p->real=c1->real+c2->real; p->virt=c1->virt+c2->virt; return p; } complex*sub(complex*c1,complex*c2) { complex *p; p->real=c1->real-c2->real; p->virt=c1->virt-c2->virt; return p; } complex*mul(complex*c1,complex*c2) { complex *p; p->real=c1->real*c2->real; p->virt=c1->virt*c2->virt; return p; } complex*div(complex*c1,complex*c2) { if(c2->real==0||c2->virt==0) exit(1); complex *p; p->real=c1->real/c2->real; p->virt=c1->virt/c2->virt; return p; }
6矩阵乘法
问题描述
输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。
输入格式
第一行,空格隔开的三个正整数m,s,n(均不超过200)。 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。 接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。
输出格式
m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。
样例输入
2 3 2 1 0 -1 1 1 -3 0 3 1 2 3 1
样例输出
-3 2 -8 2 提示 矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。 例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3
#include<iostream> using namespace std; int main() { int n,s,m; cin>>n>>s>>m; int a[200][200],b[200][200],c[200][200]={0}; for(int i=0;i<n;i++) for(int j=0;j<s;j++) cin>>a[i][j]; for(int i=0;i<s;i++) for(int j=0;j<m;j++) cin>>b[i][j]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) for(int k=0;k<s;k++) c[i][j]+=a[i][k]*b[k][j]; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) cout<<c[i][j]<<" "; cout<<endl; } }7大小写转换
问题描述 编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。 输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。 输出格式:输出经过转换后的字符串。 输入输出样例
样例输入
AeDb
样例输出
aEdB
#include<iostream> #include<string.h> using namespace std; int main() { char p[20]; cin>>p; int len=strlen(p); for(int i=0;i<len;i++) { if(p[i]>=65&&p[i]<=90) { p[i]+=32; continue; } if(p[i]>=97&&p[i]<=122) p[i]-=32; } cout<<p<<endl; }
8动态数组使用
从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出。要求尽可能使用函数实现程序代码。平均值为小数的只保留其整数部分。
样例输入: 5 3 4 0 0 2 样例输出: 9 1
样例输入: 7 3 2 7 5 2 9 1 样例输出: 29 4
#include<iostream> #include<string.h> using namespace std; int printsum(int a[],int n); int printaver(int a[],int n); int main() { int n; cin>>n; int *a=new int[n]; for(int i=0;i<n;i++) cin>>a[i]; printsum(a,n); printaver(a,n); delete []a; } int printsum(int a[],int n) { int sum=0; for(int i=0;i<n;i++) sum+=a[i]; cout<<sum<<" "; } int printaver(int a[],int n) { int sum=0; for(int i=0;i<n;i++) sum+=a[i]; cout<<sum/n<<endl; }9删除数组零元素
从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接
受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个
数。输出删除后数组中元素的个数并依次输出数组元素
样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的
5个整数)
5 3 4 0 0 2
样例输出:(输出格式说明:3为非零数据的个数,3 4 2 是以空格隔开的3个非零整数)
样例输入: 7 0 0 7 0 0 9 0 样例输出: 2
7 9
样例输入: 3 0 0 0 样例输出: 0
#include<iostream> using namespace std; int CompactIntegers(int a[],int n); int main() { int n,m; cin>>n; int *a=new int[n]; for(int i=0;i<n;i++) cin>>a[i]; m=CompactIntegers(a,n); cout<<m<<endl; for(int i=0;i<m;i++) cout<<a[i]<<" "; cout<<endl; delete []a; } int CompactIntegers(int a[],int n) { int m=n; for(int k=0;k<m;k++) for(int i=0;i<n;i++) { if(a[i]==0) { for(int j=i;j<n;j++) { a[j]=a[j+1]; } n--; } } return n; }10最小乘积(基本型)
问题描述
给两组数,各n个。 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。 例如两组数分别为:1 3 -5和-2 4 1 那么对应乘积取和的最小值应为: (-5) * 4 + 3 * (-2) + 1 * 1 = -25
输入格式
第一个行一个数T表示数据组数。后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000。 n<=8,T<=1000
输出格式
一个数表示答案。
样例输入
2
3
1 3 -5
-2 4 1
5
1 2 3 4 5
1 0 1 0 1
样例输出
-25
6
#include<iostream> #include<algorithm> using namespace std; bool cmp(int a, int b){ return a > b; } int main() { int m,a[10],b[10]; cin>>m; while(m--) { int n,sum=0; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) cin>>b[i]; sort(a,a+n); sort(b,b+n,cmp); for(int i=0;i<n;i++) sum+=a[i]*b[i]; cout<<sum<<endl; } }
11Torry的困惑(基本型)
问题描述
Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。
输入格式
仅包含一个正整数n,其中n<=100000。
输出格式
输出一行,即前n个质数的乘积模50000的值。
样例输入
1
样例输出
2
#include<iostream> #include<math.h> using namespace std; int main() { int n,m,num=0,i,sum=1; cin>>n; for(int j=2;j<=10000;j++) { m=sqrt(j); for(i=2;i<=m;i++) { if(j%i==0) break; } if(n<=0) break; if(i>m) { sum*=j; n--; } } cout<<sumP000<<endl; }12寻找数组中最大值
问题描述
对于给定整数数组a[],寻找其中最大值,并返回下标。
输入格式
整数数组a[],数组元素个数小于1等于100。输出数据分作两行:第一行只有一个数,表示数组元素个数;第二行为数组的各个元素。
输出格式
输出最大值,及其下标
样例输入
3
3 2 1
样例输出
3 0
#include<iostream> using namespace std; int findmax(int a[],int n); int main() { int a[100]; int n,max; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; max=findmax(a,n); cout<<a[max]<<" "<<max<<endl; } int findmax(int a[],int n) { int max=0; for(int j=0;j<n;j++) { if(a[max]<a[j]) { max=j; } } return max; }13送分啦
问题描述
这题想得分吗?想,请输出“yes”;不想,请输出“no”。
输出格式
输出包括一行,为“yes”或“no”。
#include<iostream> using namespace std; int main() { cout<<"yes"<<endl; }