1递归求二项式系数值
样例输入
一个满足题目要求的输入范例。
3 10
样例输出
与上面的样例输入对应的输出。
数据规模和约定
输入数据中每一个数的范围。
例:结果在int表示时不会溢出。
#include
using namespace std;
int fun(int k,int n);
int main()
{
int k,n;
cin>>k>>n;
cout<0)
return fun(k-1,n-1)*n/k;
}
2图形显示
问题描述
编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数):
* * * * *
* * * *
* * *
* *
*
#include
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<
3最小公倍数
问题描述
编写一函数lcm,求两个正整数的最小公倍数。
样例输入
一个满足题目要求的输入范例。
例:
3 5
样例输出
15
#include
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<
4逆序打印数字
基于例子4 ,写一个程序,在屏幕上打印:
9
8
7
6
5
#include
#include
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
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
#include
#include
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<real<<"+"<virt<<"i";
}
if(c=='-'){
p3=sub(p1,p2);
cout<real<<"+"<virt<<"i";
}
if(c=='*'){
p3=mul(p1,p2);
cout<real<<"+"<virt<<"i";
}
if(c=='/'){
p3=div(p1,p2);
cout<real<<"+"<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
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>a[i][j];
for(int i=0;i>b[i][j];
for(int i=0;i
7大小写转换
问题描述
编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。
输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。
输出格式:输出经过转换后的字符串。
输入输出样例
样例输入
AeDb
样例输出
aEdB
#include
#include
using namespace std;
int main()
{
char p[20];
cin>>p;
int len=strlen(p);
for(int i=0;i=65&&p[i]<=90)
{
p[i]+=32;
continue;
}
if(p[i]>=97&&p[i]<=122)
p[i]-=32;
}
cout<
8动态数组使用
从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出。要求尽可能使用函数实现程序代码。平均值为小数的只保留其整数部分。
样例输入:
5
3 4 0 0 2
样例输出:
9 1
样例输入:
7
3 2 7 5 2 9 1
样例输出:
29 4
#include
#include
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>a[i];
printsum(a,n);
printaver(a,n);
delete []a;
}
int printsum(int a[],int n)
{
int sum=0;
for(int i=0;i
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
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>a[i];
m=CompactIntegers(a,n);
cout<
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
#include
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>a[i];
for(int i=0;i>b[i];
sort(a,a+n);
sort(b,b+n,cmp);
for(int i=0;i
11Torry的困惑(基本型)
问题描述
Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。
输入格式
仅包含一个正整数n,其中n<=100000。
输出格式
输出一行,即前n个质数的乘积模50000的值。
样例输入
1
样例输出
2
#include
#include
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<
12寻找数组中最大值
问题描述
对于给定整数数组a[],寻找其中最大值,并返回下标。
输入格式
整数数组a[],数组元素个数小于1等于100。输出数据分作两行:第一行只有一个数,表示数组元素个数;第二行为数组的各个元素。
输出格式
输出最大值,及其下标
样例输入
3
3 2 1
样例输出
3 0
#include
using namespace std;
int findmax(int a[],int n);
int main()
{
int a[100];
int n,max;
cin>>n;
for(int i=0;i>a[i];
max=findmax(a,n);
cout<
13送分啦
问题描述
这题想得分吗?想,请输出“yes”;不想,请输出“no”。
输出格式
输出包括一行,为“yes”或“no”。
#include
using namespace std;
int main()
{
cout<<"yes"<