蓝桥杯入门算法

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<<sum%50000<<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;   
}






  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值