51Nod 1499 进制转化问题。
来源:互联网 发布:五星缩水软件安卓版 编辑:程序博客网 时间:2024/04/27 23:50
题意:
现在有好多种砝码,他们的重量是
分析:
题目被分到贪心算法了,可是我没有想到贪心的解法。
这题我是这样想的,如果一个数m只是用w,w^1.....来表示的话,那这个数字m化成w进制其中肯定只有数字0和1,但现在我们要求的数字n是需要两个不同的m相减得到的,并且这两个m的同一位不能同时出现1.现在就是要求给出一个n能不能有两个这样不同的m相减得到。
我们可以利用n的w进制数字来一步一步的判断,利用是否被借位。具体看代码。
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int main(){ long long w,m; int a[100]; int num,ans,flag; while(scanf("%lld%lld",&w,&m)==2) { memset(a,0,sizeof(a)); num = 0 ; while(m) { a[num++]=m%w; m/=w; }// for(int i = num-1 ; i >= 0 ; i--)// {// cout<<a[i]<<" ";// }// cout<<endl; //cout<<w<<endl; ans = 0 ; flag = 0 ; for(int i = 0 ; i < num ; i++) { if(ans==0) //没有被借位 { //cout<<a[i]<<endl; if(a[i]==0||a[i]==1) { ans = 0 ; } else if(a[i]==(w-1)) { ans = 1 ; } else flag = 1; } else //被借位了 { if(a[i]==0) { ans = 0 ; } else if(a[i]==w-1||a[i]==w-2) { ans = 1 ; } else flag = 1 ; } //cout<<ans<<" "<<flag<<endl; if(flag==1)break; } if(flag==0) { printf("YES\n"); } else printf("NO\n"); } return 0;}
0 0
- 51Nod 1499 进制转化问题。
- 进制转化问题小结
- 51nod 独木舟问题
- 51nod-独木舟问题
- 51nod 迷宫问题
- 51nod独木舟问题
- 51nod大鱼吃小鱼问题
- 51nod 独木舟问题
- 背包问题-----51Nod
- 独木舟问题---51Nod
- 51NOD 1040 最大公约数之和(欧拉函数 + 转化)
- 进制转化问题 Sky数
- //进制转化问题详细分析
- 大数问题之26进制转化
- 关于进制之间的转化问题
- 进制问题及其转化 方式
- 51Nod 1002 数塔取数问题
- 51 nod 1002 数塔取数问题
- HDU 5610 暴力枚举
- ZOJ 1006 的代码
- Androd 模拟键盘、鼠标事件(adb shell 实现)
- Java 基础——类的加载
- hdu 1029 Ignatius and the Princess IV
- 51Nod 1499 进制转化问题。
- 数据挖掘学习笔记-决策树算法浅析(含Java实现)
- uva11549
- C++builder调用存储过程
- Shape的属性介绍及使用
- 经典大数据架构案例:酷狗音乐的大数据平台重构
- MySQL 远程连接丢失
- java.time时间/日期API
- Hdu 2094 产生冠军