蓝桥杯 第一次三月份校训

 

这次训练只做了两道签到题,自信心非常受打击,但是痛定思痛,还是先把这次校训中典型的签到题奉上,从一点一滴开始做起叭;

1.

题目描述

学校附近有个一元店超市,生意火爆,小P学习之余在该超市里做收银员,超市经常要找10元、5元和1元面值的零钱给顾客,但小P经常在找零钱的时候算错帐,于是小P想自己写个程序来自动计算找零钱。输入一个整数代表找零钱的金额,程序计算并输出,需要10元、5元和1元面值的钱币各几张,注意保证总张数最少。

输入

一个整数,代表找零金额

输出

三个整数,空格隔开,分别表示10元、5元、1元纸币的张数。

看到这道题首先想到的是枚举,但很快被题目要求中的保证总张数最少绊住了,于是想用数组来储存张数,但显然过于繁琐放弃。后来想到张数最少不就是保证大面额的张数最多就ok了?过分沙雕导致的浪费时间,暴漏做题太少的问题。

代码实现:

 1 #include<stdio.h>
 2 int  main()
 3 {
 4     int a,n,b,c;
 5      
 6     scanf("%d",&n);
 7     a=n/10;
 8     b=n%10/5;
 9     c=n%10%5;
10     printf("%d %d %d\n",a,b,c);
11      
12     return 0;
13 }

 2.

题目描述
终于到达考场的小P忘了自己坐在那里了,但他想起自己的座位号是第K个bofinacci数
马上就要考试了,请你帮助他求出他的座位号
设bi表示第i个bofinacci数,则b1=b2=1,对于i≥3有bi=(b2i−2+bi−1∗(i−1))%i
输入
一个整数K (K≤1000000)
输出
一个整数表示小P的座位号
这道题乍一看跟之前那个什么数列很相似,本来编写了一个函数就是死活过不去,后来没办法了不能用函数了,就放到主函数里了,后来算b3的时候忘记初始化b1,b2了,浪费了很长时间,刚好时运不济赶上电脑编译器不能调试了,蒙着提交好几次。
代码实现:
 1 #include<stdio.h>
 2 long int a[1000001];
 3 int main()
 4 {
 5     long int k;
 6     int i=3;
 7     scanf("%ld",&k);
 8     a[1]=a[2]=1;
 9     if(k<=2)
10     {
11             printf("1");
12             return 0;
13     }
14     while(k>2)
15     {
16         a[i]=(a[i-2]*a[i-2]+a[i-1]*(i-1))%i;
17         k--;
18         i++;
19     }
20     printf("%ld",a[i-1]);
21     return 0;
22 }

3.

题目描述

小P对自己的母校很有感情,他看到一个字符串的时候,总是看一看字符串中的字母能不能组成他母校名字的英文缩写,现给定一个仅由英文字母构成的字符串。请你帮小P找一找能组成几个学校名字的英文缩写。字母不区分大小写。

输入

第一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。

第二行为小P学校名字的英文缩写,名字缩写长度不超过10。

输出
输出一个整数,表示字符串中包含学校名字缩写的个数。
这道题神坑,刚开始没有发现规律,也不知道在想什么,后来发现他就是在变相的数字目啊,刚好之前做过这种题目,但自己老分不清排序和找出最小值,是自己的锅自己背。
 1 #include<stdio.h>
 2 #include<string.h>
 3 char s1[10001],s2[10];
 4 int a[26]={0},b[26]={0};
 5 int main()
 6 {
 7  int i,j;
 8  char ch;
 9  gets(s1);
10  gets(s2);
11  
12  for(i=0;i<strlen(s1);i++)
13  {  ch=s1[i];
14      if(ch>='A'&&ch<='Z')
15      ch=ch+32;
16      if(ch>='a'&&ch<='z')
17      a[ch-'a']++;
18      //a[i]的值就代表第几个字母的个数; 
19  }
20  
21  
22 for(i=0;i<strlen(s2);i++)
23  {  ch=s2[i];
24      if(ch>='A'&&ch<='Z')
25      ch=ch+32;
26      if(ch>='a'&&ch<='z')
27      b[ch-'a']++;
28      //b[i]的值就代表第几个字母的个数; 
29  }
30  
31  int min=99999; 
32  for(i=0;i<26;i++)
33  {
34  if(b[i]!=0&&a[i]/b[i]<min)
35      min=a[i]/b[i];
36 }
37 
38 printf("%d\n",min);
39  
40  
41  return 0;
42  
43 } 

到此为止签到题就没有啦,后面的大佬题待我研究研究再上传。

-

posted @ 2019-03-04 10:44  沅清的小窝  阅读(227)  评论(0编辑  收藏  举报