今天做了4个简单的题,题目虽然是简单,但是对于我这样的小白,还是有很多东西需要学习的。

2的次幂表示

上面就是题目,题目说的也很清晰了,接下来就是递归的实现:

 1 #include<iostream>
 2 using namespace std;
 3 void puts(int n)
 4 {
 5     int i=0,num=0;
 6     int a[20] = {0};
 7     while(1)
 8     {
 9         if(n==0)    break;
10         int temp = n%2;
11         if(temp!=0)
12         {
13             a[num] = i;
14             num++;
15         }
16         i++;
17         n = n/2;
18     }
19     for(i = num-1; i >= 0; i--)
20     {
21         if(a[i]==0)
22         {
23             cout<<"2(0)";
24         }
25         else if(a[i]==1)
26         {
27             cout<<"2";
28         }
29         else if(a[i]>=2)
30         {
31             cout<<"2(";
32             puts(a[i]);
33             cout<<")";
34         }
35         if(i!=0)
36         {
37             cout<<"+";
38         }
39     }
40
41 }
42 int main()
43 {
44     int n;
45     cin>>n;
46     puts(n);
47     return 0;
48  } 

关键是找到应该在哪里递归。

前缀表达式

我们之前说到过后缀表达式,实际上,前缀表达式更符合计算机运算规则。

 1 #include<iostream>
 2 using namespace std;
 3 void add(int a,int b)
 4 {
 5     cout<<a+b;
 6 }
 7 void sub(int a,int b)
 8 {
 9     cout<<a-b;
10 }
11 void mul(int a,int b)
12 {
13     cout<<a*b;
14 }
15 void div(int a,int b)
16 {
17     cout<<a/b;
18 }
19 int main()
20 {
21     char a;
22     int b,c;
23     cin>>a>>b>>c;
24     switch(a)
25     {
26         case '+':
27             add(b,c);
28             break;
29         case '-':
30             sub(b,c);
31             break;
32         case '*':
33             mul(b,c);
34             break;
35         case '/':
36             div(b,c);
37             break;
38         default:
39             break;
40     }
41     return 0;
42 } 

Anagrams问题

看到这个问题的时候,首先想到了之前学长教过的,要充分利用下标,最多有26个英文字母。我们开创两个数组,分别存放两个字符串,将英文字母在字母表中的顺序对应数组的下标,是个很不错的选择。

但是我第一次写的时候,使用的是char型数组,一个一个读入,最后发现运行超时,改用字符串读入方法,问题就得以解决了,这就提示我,以后遇到字符串问题,优先考虑字符串处理。

代码如下:

 1 #include<iostream>
 2 #include<string.h>
 3 using namespace std;
 4 int trans(char a)
 5 {
 6     if(a>='a'&&a<='z')
 7     {
 8         return a-'a';
 9     }
10     if(a>='A'&&a<='Z')
11     {
12         return a-'A';
13      }
14 }
15 int main()
16 {
17     int num1[26]={0};
18     int num2[26] = {0};
19     int flag = 0;
20     char a[81],b[81];
21 /*    while(1)
22     {
23         scanf("%c",&a);
24         if(a=='\n')    break;
25         num1[trans(a)]++;
26     }
27     while(1)
28     {
29         scanf("%c",&a);
30         if(a=='\n')    break;
31         num2[trans(a)]++;
32     }    */
33     cin>>a;
34     cin>>b;
35
36     for(int i = 0; i < strlen(a); i++)
37     {
38         num1[trans(a[i])]++;
39      }
40     for(int i = 0; i < strlen(b); i++)
41     {
42         num2[trans(b[i])]++;
43      }
44     for(int i = 0; i < 26; i++)
45     {
46         if(num1[i]!=num2[i])
47         {
48             flag = 1;
49             cout<<"N";
50             break;
51         }
52     }
53     if(flag==0)
54     cout<<"Y";
55     return 0;
56 } 

在主函数中有一点注释部分,这就是最初使用的方法。

出现次数最多的整数

设计两个数组,一个存放的就是输入的数据,另一个存放的是对应出现的次数。这里就需要考虑一下,有的数字重复出现,怎么样才能使其实现计数,并且将两个数组实现一一对应。

代码如下:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int num[20] = {0};//存放每个数字
 6     int sum[20] = {0};//存放每个数字的个数
 7     int n;
 8     int i = 0;
 9     int j = 0;
10     cin>>n;
11     for(i = 0; i < n; i++)
12     {
13         cin>>num[i];
14         if(num[i]==num[i-1])
15         {
16             sum[j-1]++;
17             j--;
18         }
19         j++;
20     }
21     if(j!=0)
22     {
23         int max = 0;
24         for(int j = 0; j < i; j++)
25         {
26             if(sum[j]<sum[j+1])
27             {
28                 max = j+1;
29             }
30         }
31         cout<<num[max];
32         return 0;
33     }
34 } 

关键是这里:

【感想】简单题虽然称之为简单题,但是还是需要练习,绝对不能眼高手低,没有一次100%成功,就说明自己还是修炼不够,需要继续努力。从小处获取经验,慢慢积累,相信自己。

蓝桥杯算法训练_2的次幂表示+前缀表达式+Anagrams问题+出现次数最多的整数相关推荐

  1. 蓝桥杯-算法训练 2的次幂表示

    题目链接:http://lx.lanqiao.cn/problem.page?gpid=T235 问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001. 将这种2进制 ...

  2. 蓝桥杯 算法训练 幸运的店家

    蓝桥杯 算法训练 幸运的店家 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 炫炫开了一家商店,卖的货只有一个,XXX,XXX卖N元钱.有趣的是,世界上只有面值为3的幂的纸 ...

  3. 蓝桥杯 算法训练 Beaver's Calculator

    蓝桥杯 算法训练 Beaver's Calculator 问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator ...

  4. 蓝桥杯 算法训练 印章

    蓝桥杯 算法训练 印章 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入输出: 一行两个正整数n和m 一个实数P表示答案,保留4位小数. 样例: 2 3 ...

  5. 蓝桥杯算法训练-24点(Python)

    问题描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加.减.乘.除以及括号想办法得到24, ...

  6. 蓝桥杯——算法训练——数字三角形

    蓝桥杯--算法训练--数字三角形 这道题不难,但是比较典型,可以作为动态规划(dp)的入门篇,属于线性dp(LIS,LCS和数字三角形都是此类题型). ------------------------ ...

  7. 蓝桥杯算法训练-强力党逗志芃

    持续更新蓝桥杯算法训练题解,有兴趣可以关注一波呀 题目 逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能.现在我们可以了解到,每个技能都有一个前提技能,只有学完了前提技能才能学习当前 ...

  8. 蓝桥杯 算法训练 逗志芃的危机

    蓝桥杯 算法训练 逗志芃的危机 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和 ...

  9. 蓝桥杯算法训练-过河马

    蓝桥杯算法训练题解有兴趣的可以支持下. 题目 问题描述 在那个过河卒逃过了马的控制以超级超级多的走法走到了终点之后,这匹马表示它不开心了-- 于是,终于有一天,它也过河了! 由于过河马积累了许多的怨念 ...

最新文章

  1. 智能手机背面玻璃的缺陷检测,分割网络的应用
  2. 软件工程第一周开课博客
  3. android应用资源可以分为两大类,Android 应用资源(一)
  4. mysql 8重置root密码_如何在MySQL 8中重置root密码
  5. Python基于nginx访问日志并统计IP访问量
  6. Super Jumping! Jumping! Jumping! HDU - 1087
  7. React 等框架使用 index 做 key 的问题
  8. mysql 5.1升级5.6_mysql 5.1.71升级到5.6.30
  9. Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
  10. FILE类型指针的头文件
  11. linux设置系统环境变量的天坑
  12. LINGO编程简介与实例
  13. xlsx文件损坏修复工具_野猫软件榜之文件修复工具
  14. 2.aop原理:@EnableAspectJAutoProxy
  15. 嘘——2021还没对象?你的虚拟女友已上线。
  16. b站视频怎么引流?b站做什么视频有流量?b站流量引流技巧
  17. 移动支付清算平台介绍
  18. 23考研计算机:天津理工大学
  19. dede php addfilter,织梦dede筛选功能+伪静态
  20. 2013年华北五省计算机应用大赛,我校学生在华北五省计算机应用大赛获得佳绩...

热门文章

  1. python mmap对象
  2. 【DP优化】【P1430】序列取数
  3. python——type()、metaclass元类和精简ORM框架
  4. 经验之谈:Linux运维工程师所需技能
  5. Magicodes.WeiChat——自定义knockoutjs template、component实现微信自定义菜单
  6. 最近用到的几种前后端交互方式
  7. 2021年终总结-向着阳光前进
  8. 使用Lua编写whireshark插件
  9. 解决windows10 wireshark无法抓取发出去的包只能抓取接受数据包
  10. 磁盘满了,为啥du却显示还有很大空间?