文章目录

  • 第二周
    • 3. Hexadecimal's Numbers
    • 5. Die Roll
    • 7. Help Far Away Kingdom
    • 9. Help Victoria the Wise
    • 13. Lucky Numbers (easy)
    • 打表

第二周

3. Hexadecimal’s Numbers

输入n,输出1-n的自然数中各数位只包含0和1的数的个数。数据范围为10的9次方

常规思路一:dfs从1开始找n*10和n*10+1;

#include<cstdio>
int n;
int count=0;//计数器
int binary(int m) {//找出二进制型的数 if(m>n) return 0;//超过范围及时退出 else count++;binary(m*10);//找n*10型的二进制型数 binary(m*10+1);//找n*10+1型的二进制型数
}
int main() {scanf("%d", &n);//输入n binary(1);//从1开始找 printf("%d", count);//输出结果 return 0;
}

非常规思路二:打表

10^9内共有512个二进制型的数。

1到512转为二进制数

#include<cstdio>
const int ans[]= {1,10,11,100,101,110,111,1000,1001,1010,1011,1100,1101,1110,1111,10000,10001,10010,10011,10100,10101,10110,10111,11000,11001,11010,11011,11100,11101,11110,11111,100000,100001,100010,100011,100100,100101,100110,100111,101000,101001,101010,101011,101100,101101,101110,101111,110000,110001,110010,110011,110100,110101,110110,110111,111000,111001,111010,111011,111100,111101,111110,111111,1000000,1000001,1000010,1000011,1000100,1000101,1000110,1000111,1001000,1001001,1001010,1001011,1001100,1001101,1001110,1001111,1010000,1010001,1010010,1010011,1010100,1010101,1010110,1010111,1011000,1011001,1011010,1011011,1011100,1011101,1011110,1011111,1100000,1100001,1100010,1100011,1100100,1100101,1100110,1100111,1101000,1101001,1101010,1101011,1101100,1101101,1101110,1101111,1110000,1110001,1110010,1110011,1110100,1110101,1110110,1110111,1111000,1111001,1111010,1111011,1111100,1111101,1111110,1111111,10000000,10000001,10000010,10000011,10000100,10000101,10000110,10000111,10001000,10001001,10001010,10001011,10001100,10001101,10001110,10001111,10010000,10010001,10010010,10010011,10010100,10010101,10010110,10010111,10011000,10011001,10011010,10011011,10011100,10011101,10011110,10011111,10100000,10100001,10100010,10100011,10100100,10100101,10100110,10100111,10101000,10101001,10101010,10101011,10101100,10101101,10101110,10101111,10110000,10110001,10110010,10110011,10110100,10110101,10110110,10110111,10111000,10111001,10111010,10111011,10111100,10111101,10111110,10111111,11000000,11000001,11000010,11000011,11000100,11000101,11000110,11000111,11001000,11001001,11001010,11001011,11001100,11001101,11001110,11001111,11010000,11010001,11010010,11010011,11010100,11010101,11010110,11010111,11011000,11011001,11011010,11011011,11011100,11011101,11011110,11011111,11100000,11100001,11100010,11100011,11100100,11100101,11100110,11100111,11101000,11101001,11101010,11101011,11101100,11101101,11101110,11101111,11110000,11110001,11110010,11110011,11110100,11110101,11110110,11110111,11111000,11111001,11111010,11111011,11111100,11111101,11111110,11111111,100000000,100000001,100000010,100000011,100000100,100000101,100000110,100000111,100001000,100001001,100001010,100001011,100001100,100001101,100001110,100001111,100010000,100010001,100010010,100010011,100010100,100010101,100010110,100010111,100011000,100011001,100011010,100011011,100011100,100011101,100011110,100011111,100100000,100100001,100100010,100100011,100100100,100100101,100100110,100100111,100101000,100101001,100101010,100101011,100101100,100101101,100101110,100101111,100110000,100110001,100110010,100110011,100110100,100110101,100110110,100110111,100111000,100111001,100111010,100111011,100111100,100111101,100111110,100111111,101000000,101000001,101000010,101000011,101000100,101000101,101000110,101000111,101001000,101001001,101001010,101001011,101001100,101001101,101001110,101001111,101010000,101010001,101010010,101010011,101010100,101010101,101010110,101010111,101011000,101011001,101011010,101011011,101011100,101011101,101011110,101011111,101100000,101100001,101100010,101100011,101100100,101100101,101100110,101100111,101101000,101101001,101101010,101101011,101101100,101101101,101101110,101101111,101110000,101110001,101110010,101110011,101110100,101110101,101110110,101110111,101111000,101111001,101111010,101111011,101111100,101111101,101111110,101111111,110000000,110000001,110000010,110000011,110000100,110000101,110000110,110000111,110001000,110001001,110001010,110001011,110001100,110001101,110001110,110001111,110010000,110010001,110010010,110010011,110010100,110010101,110010110,110010111,110011000,110011001,110011010,110011011,110011100,110011101,110011110,110011111,110100000,110100001,110100010,110100011,110100100,110100101,110100110,110100111,110101000,110101001,110101010,110101011,110101100,110101101,110101110,110101111,110110000,110110001,110110010,110110011,110110100,110110101,110110110,110110111,110111000,110111001,110111010,110111011,110111100,110111101,110111110,110111111,111000000,111000001,111000010,111000011,111000100,111000101,111000110,111000111,111001000,111001001,111001010,111001011,111001100,111001101,111001110,111001111,111010000,111010001,111010010,111010011,111010100,111010101,111010110,111010111,111011000,111011001,111011010,111011011,111011100,111011101,111011110,111011111,111100000,111100001,111100010,111100011,111100100,111100101,111100110,111100111,111101000,111101001,111101010,111101011,111101100,111101101,111101110,111101111,111110000,111110001,111110010,111110011,111110100,111110101,111110110,111110111,111111000,111111001,111111010,111111011,111111100,111111101,111111110,111111111,1000000000};
int main() {int a;scanf("%d", &a);for(int i=0; i<512; i++)if(ans[i]>a) {printf("%d", i);break;}return 0;
}

思路三:直接十重循环,生成所有可能的数,再判断是否在区间内

#include<iostream>
#include<cstdio>
using namespace std;
int a[100],ans,n;
int pow_(int a,int b)
{int s=1;for(int i=1;i<=b;i++) s*=a;return s;
}//手写pow,避免鬼畜
int main()
{scanf("%d",&n);for(a[1]=0;a[1]<=1;a[1]++)for(a[2]=0;a[2]<=1;a[2]++)for(a[3]=0;a[3]<=1;a[3]++)for(a[4]=0;a[4]<=1;a[4]++)for(a[5]=0;a[5]<=1;a[5]++)for(a[6]=0;a[6]<=1;a[6]++)for(a[7]=0;a[7]<=1;a[7]++)for(a[8]=0;a[8]<=1;a[8]++)for(a[9]=0;a[9]<=1;a[9]++)for(a[10]=0;a[10]<=1;a[10]++)//十重循环,暴力判断{int s=0;for(int i=1;i<=10;i++)s+=a[i]*pow_(10,10-i);if(s>=1&&s<=n) ans++;}printf("%d",ans);return 0;
}

思路四:存在一个判断n的最近一个二进制数是多少,转成十进制就是个数了

比如13就要找到11然后转成3

这个数由n中大于等于1的数位全变成1就完事了

5. Die Roll

小Y,小W和小D进行扔骰子(六面)游戏,谁投出的点数最大算谁胜利,现在已知小Y和小W的得分,请你帮小D求出她获胜的概率

注意:

1.以"分子/分母"输出,特别的,若不可能获胜输出"0/1",100%获胜输出"1/1"

2.小Y和小W非常绅士,如果小D的得分和他们一样,他们也会算作小D获胜

思路:判断小y和小w两个值哪个大,大的那个和6比还剩下多少可以取的值,再算概率

#include<bits/stdc++.h>
using namespace std;int y, w;
int maxn, d;int main() {cin >> y >> w;maxn = max(y, w);d = 6 - maxn + 1;if (d == 1)cout << "1/6";//小d只能为6if (d == 2)cout << "1/3";//小d可为6、5if (d == 3)cout << "1/2";//小d可为6、5、4if (d == 4)cout << "2/3";//小d可为6、5、4、3if (d == 5)cout << "5/6";//小d可为6、5、4、3、2if (d == 6)cout << "1/1";//小d必胜return 0;
}

7. Help Far Away Kingdom

给你一个浮点数,如果整数部分最后一位是9就输出"GOTO Vasilisa."(不含引号),否则输出这个数(输出时要四舍五入到整数位)

思路:字符串处理

#include<bits/stdc++.h>
using namespace std;int main() {string num;while (cin >> num){for (int i = 0; i<num.length(); ++i){if (num[i] == '.'){if (num[i - 1] == '9'){cout << "GOTO Vasilisa." << '\n';break;}else{if (num[i + 1] >= '5')num[i - 1] += 1;string n = num.substr(0, i);//分割字符串cout << n << '\n';break;}}}}return 0;
}

9. Help Victoria the Wise

在一个正方体上涂色,给出可以涂的颜色,求有多少种涂的方法,若可以通过旋转得到的两种情况视为同一种情况。

我们只要把每种情况的方案数算出来,直接就可以解得。

枚举出来,总共11种;

1、6——1;

2、1,5——1;

3、2,4——2;

4、3,3——2;

5、1,1,4——2;

6、1,2,3——3;

7、2,2,2——6;//考虑两个面涂好,再涂其他面,之后的考虑方法相同

8、1,1,1,3——5;

9、1,1,2,2——8;

10、1,1,1,1,2——15;

11、1,1,1,1,1,1——30;

#include<bits/stdc++.h>
using namespace std;
bool cmp(int a, int b)
{return a>b;
}
int main()
{string a;int b[500], i;cin >> a;memset(b, 0, sizeof(b));for (i = 0; i<6; i++){if (a[i] == 'R') b[0]++;else if (a[i] == 'O') b[1]++;else if (a[i] == 'Y') b[2]++;else if (a[i] == 'G') b[3]++;else if (a[i] == 'B') b[4]++;else if (a[i] == 'V') b[5]++;}sort(b, b + 6, cmp);if ((b[0] == 6) || (b[0] == 5 && b[1] == 1)) printf("1\n");else if ((b[0] == 4 && b[1] == 2) || (b[0] == 3 && b[1] == 3) || (b[0] == 4 && b[1] == 1 && b[2] == 1)) printf("2\n");else if (b[0] == 3 && b[1] == 2 && b[2] == 1) printf("3\n");else if (b[0] == 2 && b[1] == 2 && b[2] == 2) printf("6\n");else if (b[0] == 3 && b[1] == 1 && b[2] == 1 && b[3] == 1) printf("5\n");else if (b[0] == 2 && b[1] == 2 && b[2] == 1 && b[3] == 1) printf("8\n");else if (b[0] == 2 && b[1] == 1 && b[2] == 1 && b[3] == 1 && b[4] == 1) printf("15\n");else if (b[0] == 1 && b[1] == 1 && b[2] == 1 && b[3] == 1 && b[4] == 1 && b[5] == 1) printf("30\n");return 0;
}

13. Lucky Numbers (easy)

题目要求输出不小于n的最小整数,这个整数要求只含有4和7这两个数字,并且4出现的次数等于7出现的次数。暴力打表(大概2分钟),水过!

注意18题题意相同,数据范围增大,考虑dfs。

//打表代码:
#include<iostream>
using namespace std;
typedef long long LL;
bool judge(LL x){int t1 = 0, t2 = 0;while (x){int a = x % 10;if (a != 4 && a != 7)return false;if (a == 4)t1++;if (a == 7)t2++;x /= 10;}if (t1 == t2)return true;else return false;
}
int main(){for (LL i = 47; i < 10000000000; ++i)if (judge(i)){ cout << i << ','; }return 0;
}
//AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n,obj[]={47,74,4477,4747,4774,7447,7474,7744,444777,447477,447747,447774,474477,474747,474774,477447,477474,477744,744477,744747,744774,747447,747474,747744,774447,774474,774744,777444,44447777,44474777,44477477,44477747,44477774,44744777,44747477,44747747,44747774,44774477,44774747,44774774,44777447,44777474,44777744,47444777,47447477,47447747,47447774,47474477,47474747,47474774,47477447,47477474,47477744,47744477,47744747,47744774,47747447,47747474,47747744,47774447,47774474,47774744,47777444,74444777,74447477,74447747,74447774,74474477,74474747,74474774,74477447,74477474,74477744,74744477,74744747,74744774,74747447,74747474,74747744,74774447,74774474,74774744,74777444,77444477,77444747,77444774,77447447,77447474,77447744,77474447,77474474,77474744,77477444,77744447,77744474,77744744,77747444,77774444,4444477777};
int main(){cin>>n;for(int i=0;;++i)if(obj[i]>=n){cout<<obj[i]<<endl;break;}return 0;
}

打表

打表,是一个信息学专用术语,意指对一些题目,通过打表技巧获得一个有序表或常量表,来执行程序某一部分,优化时间复杂度。这种算法也可用于在对某种题目没有最优解法时,用来得到分数的一种策略。

1)找到答案的方式
(1)通过暴力搜索,找出对于数据的答案,适用于数据较大,题目简单的情况;
(2)通过手算,找出每个数据的答案,适用于数据较小且题目较难的情况;
(3)在某些题目中,因为考虑到预处理出所有答案的时间复杂度可能会比依次读入再求更优,所以就在读入数据前

​ 进行对所有可能的询问的答案或部分必要条件的预处理。这种方法虽然也是打表,但编程复杂度不亚于其他程序,而且一般是题目的正解。

2)输出答案的方式
(1)直接在程序内打表,如果打表复杂度较大则不可用。  
(2)提前打表,然后复制放入程序。

【刷题笔记】CG第二周相关推荐

  1. 王道计算机考研机试指南刷题笔记-自用

    | 写在开头 前两周磨磨唧唧把第二章暴力求解枚举部分的例题和习题都AC了,思路都不太难,找到规律很快就能写出来,想着一定要写刷题笔记,把coding时遇到的困难都记录下来,方便以后复习,却也一直未曾动 ...

  2. 数据库,计算机网络、操作系统刷题笔记17

    数据库,计算机网络.操作系统刷题笔记17 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其s ...

  3. 我收藏的谷歌和阿里大佬的刷题笔记

    金三银四大家在准备校招.社招,或者闲暇的时候,都可以刷刷 Leetcode,保持良好的手感. 之前刷题,一直觉得漫无目的地刷,效率很低.后来发现了两个刷题笔记,谷歌大佬高畅和BAT大佬霜神写的 Lee ...

  4. 【c++算法刷题笔记】——洛谷2

    1. 洛谷练习--P1579 哥德巴赫猜想(升级版) 题目描述: 现在请你编一个程序验证哥德巴赫猜想. 先给出一个奇数n,要求输出3个质数,这3个质数之和等于输入的奇数. 输入格式: 仅有一行,包含一 ...

  5. 《剑指 Offer I》刷题笔记 20 ~ 30 题

    <剑指 Offer I>刷题笔记 20_30 动态规划(简单) 20. 斐波那契数列 _解法1:迭代 解法2:记忆化递归 解法3:动态规划 21. 青蛙跳台阶问题 _解法1:动态规划 22 ...

  6. 《剑指 Offer I》刷题笔记 1 ~10 题

    <剑指 Offer I>刷题笔记 1 ~10 题 栈与队列(简单) 1. 用两个栈实现队列 _解法 1:暴力做法 解法 2:优化解法 1 2. 包含 min 函数的栈 _解法 1:pop( ...

  7. SQLZOO刷题笔记

    SQLZOO刷题笔记-更新中 注意 Self Join 10. 公交车的转车站点 Window functions 0. 排序 1. warming up 2. Who won? 3. PARTITI ...

  8. 数据库,计算机网络、操作系统刷题笔记20

    数据库,计算机网络.操作系统刷题笔记20 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其s ...

  9. 算法入门刷题笔记 Day2 K - Coat of Anticubism L - Five-In-a-Row M - Island Puzzl......

    写在前面 好久没更新公众号和博客了,因为最近在研究新的方向,所以很少发文. 笔者接触编程只有一年,这一年间主要研究启发式算法在运筹学中的应用.但是由于编程基础薄弱,在进一步研究复杂运筹学问题时发现基础 ...

  10. 操作系统,计算机网络,数据库刷题笔记10

    操作系统,计算机网络,数据库刷题笔记10 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其s ...

最新文章

  1. Python 列表(List) 取区间元素 [:] 用法
  2. 下载和安装Nginx之配置选项
  3. EEG数据、伪影的查看与清洗
  4. UVa307 - Sticks(DFS+剪枝)
  5. 如何看待 Apache Log4j 2 远程代码执行漏洞?
  6. Python进阶-函数默认参数,特别是参数传递为空列表
  7. c加加中print是什么意思_砖家财经:基金名字后面的A、B和C,分别代表什么意思?...
  8. Nginx 快速搭建HTTP 文件服务器
  9. C#编程语言(六):枚举类型与结构类型
  10. linux学习随笔第一天
  11. calendar的使用以及如何获取某月份最后一天的方法
  12. Pulsar较Kafka的优势
  13. java 多线程详细(转载)
  14. 新一批交通强国试点工作启动
  15. 算法面试中:时间复杂度和空间复杂度是什么?
  16. pygame鼠标进行拖拽移动图片、缩放、以及按钮响应 案例
  17. 通过PS把普通数码照片制作成素描照片
  18. ipad iphone开发_如何在iPhone或iPad上“不信任”计算机
  19. Lingo 中的各种函数
  20. 1833. 雪糕的最大数量-每日一题

热门文章

  1. R语言 by()用法
  2. 老鹰主机怎么样_HawkHost老鹰主机香港机房速度怎么样?
  3. java面试题(记录与分享)二
  4. 算法:一个小人通过有鳄鱼的河
  5. android仿支付宝弹窗,AlipayPassDialog Android 仿支付宝密码键盘弹框,可以自定义样式 Dialog,调节字体颜色大小内容 @codeKK Android开源站...
  6. 开启多媒体台式计算机过程,东师多媒体计算机技术19秋在线作业2题目【标准答案】...
  7. 【Benewake(北醒) 】中距 TF02-i 40m工业版本CAN/485介绍以及资料整理
  8. 快速准时安全放心,顺丰黄金派送服务受认可
  9. lio linux工具,Linux中三种SCSI target的介绍之LIO
  10. 一张图区分0、null、undefined、Non-zero