洛谷P1590 失踪的7
来源:互联网 发布:电脑连不上网络错误711 编辑:程序博客网 时间:2024/05/17 09:39
洛谷P1590 失踪的7
题目描述
远古的Pascal人也使用阿拉伯数字来进行计数,但是他们又不喜欢使用7,因为他们认为7是一个不吉祥的数字,所以Pascal数字8其实表示的是自然数中的7,18表示的是自然数中的16。下面计算一下,在正整数n范围以内包含有多少个Pascal数字。
输入输出格式
输入格式:
第一行为正整数t,接下来t行,每行一个正整数n(≤2^32-1)。
输入的是Pascal数字
输出格式:
对于每个正整数n,输出n以内的Pascal数的个数。
输入输出样例
输入样例#1:
2
10
20
输出样例#1:
9
18
虽然是个入门题但是不想写暴力,
于是开始xjb搞事情什么的QWQ
所以鱼块地发题解了,
以下用了一种十分奇怪的解法,叫做:进制转换!!
首先,Pascal数字是由0,1,2,3,4,5,6,8,9 九个数字组成的
所以我们很(不)容易想到Pascal数字可以近似的看成一种九进制数
所以题面:
在正整数n范围以内包含有多少个Pascal数字
就可以看作:
读入一个Pascal数 ,转为普通数字
即读入一个九进制数,转为十进制(我的理解QWQ)
//当然还是满十进一但是7消失了QWQ
所以我写了这样的代码
代码1:
//九进制转十进制 #include <iostream>#include <cstring>using namespace std;long long k,ans=0;int t,i;char a[1001];int main(){ cin>>t; while (t--) { ans=0; cin>>a; k=strlen(a); for (i=0;i<k;++i) ans=ans*9+a[i]-'0'; cout<<ans<<endl; }}
然后很容易发现出了Bug,即WA了TUT
Bug是什么呢??
当我们把题目抽象成 九进制转十进制 时,是把1~n中所有含数位9的数字判定为非Pascal数,而不是题目要求的7
就是当读入的数据中含有7,8,9时,应该被判定为非Pascal数的含数位7的数被判定为了Pascal数
而当读入数据中不含7,8,9时,7的出现就和9的出现相匹配
即 9
所以我们需要一个特判,将多计算的Pascal数减去QWQ
代码2:
#include <iostream>#include <cstring>using namespace std;long long k,s=1,sum=0,ans=0;int t,i,j;char a[1001];int main(){ cin>>t; while (t--) { ans=sum=0; s=1; cin>>a; k=strlen(a); //以下若干行是特判QWQ for (i=0;i<k;++i) /* 如果读入的数的某个数位是7 那么意味着 假设读入abcd7efgh(a,b,c,d都不是7), 那么从 abcd70000 到 abcd7efgh 都不是Pascal数 那么其结果就与 abcd69999 相同 such as 700 其运行结果和699 完全一致 5789898984 和 5699999999 运行结果完全一致 把这个数从最高位到最低位扫一遍,如果该位是7,就把7替换为6,之后数位替换为9 */ if (a[i]=='7') { a[i]='6'; for (j=i+1;j<k;++j) a[j]='9'; break; } for (i=k-1;i>=0;--i) /* 减去应该被消去却【划掉】因进制转换的不合理性【划掉】被保留的数字的个数: 如果一个数的个位是8或9,就少减了9^0个7 如果一个数的十位是8或9,就少减了9^1个7 如果一个数的百位是8或9,就少减了9^2个7 ...以此类推 是个比较明显的找规律,不想写证明QWQ */ { if (a[i]>'7') sum+=s; s*=9; } for (i=0;i<k;++i) ans=ans*9+a[i]-'0'; cout<<ans-sum<<endl; }} //其实代码2确实是凑出来的TUT//但还是完结撒花~~
因为是脑洞做法的所以如果有dalao证明或证伪求联系我QWQ
- 【洛谷】P1590 失踪的7
- 洛谷P1590 失踪的7
- 洛谷 P1590 失踪的7
- 失踪的7(P1590&NOIP水题测试(2017082301))
- 失踪的7
- 失踪
- 失踪~~~
- 失踪?失踪!!
- 在Win2003下寻找“失踪”的移动硬盘
- 为马航失踪的同胞 祈福
- 出去寻找的姐姐也失踪了
- 找回firefox失踪的收藏按钮
- 小说--《黑客的心》第十一章 陆笑天的失踪!
- 95年轰动北京的330路公交车神秘失踪
- Windows Server 2008的R2和失踪传真打印机
- VB.NET之旅(一)—失踪的窗体
- 与曹操发生一夜情的女人失踪之谜
- 终于等到“你”之“失踪的桌面声音图标”
- 卡尔曼滤波简介及其算法实现代码(C++/C/MATLAB)
- Android Makefile之默认Ringtone显示None
- Windows 安装itk
- day3
- 《高性能MySQL》 第二章 MySQL基准测试
- 洛谷P1590 失踪的7
- android中获取view在布局中的高度和宽度
- php框架-lavarel安装
- 键盘按键码表
- 莫队
- JavaScript继承方式
- OpenCV实现遍历文件夹下所有文件
- UVA Live 7146 Defeat the Enemy——STL
- java对象转map