蓝桥杯入门算法

    xiaoxiao2021-08-20  113

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

    转载请注明原文地址: https://ju.6miu.com/read-676765.html

    最新回复(0)