1、蓝桥杯 基础算法,基础算法,图形显示 排序 前缀表达式 分糖果 回文数字,问题描述编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数): * * * * * * * * * * * * * * *,图形显示ALGO-101,C程序:,图形显示ALGO-101,#include “stdio.h“ int main() int x,i,j;scanf(“%d“, ,排序ALGO-97,问题描述编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。 输入格式:输入只有一行,即三个整数,中间用空格隔开。 输出格式:输出只有一行,即排序后的结果。 输入输出
2、样例,样例输入 9 2 30,样例输出 30 9 2,排序ALGO-97,C程序:,#include “stdio.h“ int main() int x,y,z,tem;scanf(“%d%d%d“,if(xz) tem=x; x=z; z=tem; if(yz) tem=y;y=z; z=tem;printf(“%d %d %dn“,x,y,z);return 0;,前缀表达式ALGO-92,问题描述编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不
3、超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。 输入格式:输入只有一行,即一个前缀表达式字符串。 输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。,样例输入 + 5 2,样例输出 7,前缀表达式ALGO-92,C程序:,#include “stdio.h“ add(int x,int y) return(x+y); sub(int x,int y) return(x-y); mul(int x,int y) return(x*y); div(int x,int y) return(x/y);,int
4、main() char A9,op;int x,y,result;gets(A);op=A0;if(A2=1,switch(op)case +:result=add(x,y);break;case -:result=sub(x,y);break;case *:result=mul(x,y);break;case /:if(y=0) exit(0); result=div(x,y);break;printf(“%d“,result);return 0; ,分糖果PREV-32,问题描述有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:每个小朋友都把自己的糖果分一半给左
5、手边的孩子。一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。反复进行这个游戏,直到所有小朋友的糖果数都相同为止。你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。 输入格式首先读入一个整数N(2N100),表示小朋友的人数。接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2) 输出格式要求程序输出一个整数,表示老师需要补发的糖果数。,样例输入 3 2 2 4,样例输出 4,分析:,利用数组存放每个小朋友的糖果数,用循环模拟糖果变化过程。 解步骤如下: 执行以下步骤直到数组各元素相等。 1.对数组中每个元素Ai=Ai-Ai/2+Ai+1/2, 2.若
6、Ai不是偶数则Ai+, 3. 表示补发糖果数的count+.,分糖果PREV-32,C程序:,#include“stdio.h“ #include“stdlib.h“ #define MAX 100 int main() int AMAX;int flag=1,count=0;int n,i,temp;scanf(“%d“,分糖果PREV-32,while(flag) flag=0;temp=A0/2;for(i=0;in-1;i+)Ai=Ai-Ai/2+Ai+1/2;if(Ai%2!=0) count+;Ai+;,An-1=An-1-An-1/2+temp;if(An-1%2!=0) cou
7、nt+;An-1+;for(i=0;in-1;i+)if(Ai!=Ai+1)flag=1;break; printf(“%dn“,count);return 0; ,回文数字PREV-21,问题描述观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。 本题要求你找到一些5位或6位的十进制数字。满足如下要求: 该数字的各个数位之和等于输入的整数。 输入格式一个正整数 n (10n100), 表示要求满足的数位和。 输出格式若干行,每行包含一个满足要求的5位或6位整数。 数字按从小到大的顺序排列。 如果没有满足条件的,输出:-
8、1,样例输入 44,样例输出 99899 499994 589985 994499,样例输入 60,样例输出 -1,分析:,解题步骤如下: 对于每一个5或6位数字i执行以下步骤 1.逆序分解出每位数字, 2.顺序组合成新的5或6位数字m 3.判断若各位数字和为已知量,且m= =i,则输出 若不存在满足要求的数字则输出-1.,回文数字PREV-21,C程序:,#include “stdio.h“ int main() int n,i,m;int x,y,sum,flag=0; scanf(“%d“,回文数字PREV-21,while(x!=0)y=x%10;x=x/10;sum=sum+y;m=m*10+y;if(sum=n ,