hdu-An Easy Problem
2013-08-12 09:36
399 查看
http://acm.hdu.edu.cn/webcontest/contest_showproblem.php?pid=1002&ojid=1&cid=5570&hide=0
[align=left]Problem Description[/align]
As we known, data stored in the computers is in binary form. The problem we discuss now is about the positive integers and its binary form.
Given a positive integer I, you task is to find out an integer J, which is the minimum integer greater than I, and the number of '1's in whose binary form is the same as that in the binary form of I.
For example, if "78" is given, we can write out its binary form, "1001110". This binary form has 4 '1's. The minimum integer, which is greater than "1001110" and also contains 4 '1's, is "1010011", i.e. "83", so you should output "83".
[align=left]Input[/align]
One integer per line, which is I (1 <= I <= 1000000).
A line containing a number "0" terminates input, and this line need not be processed.
[align=left]Output[/align]
One integer per line, which is J.
[align=left]Sample Input[/align]
[align=left]Sample Output[/align]
[/code]
[align=left]Problem Description[/align]
As we known, data stored in the computers is in binary form. The problem we discuss now is about the positive integers and its binary form.
Given a positive integer I, you task is to find out an integer J, which is the minimum integer greater than I, and the number of '1's in whose binary form is the same as that in the binary form of I.
For example, if "78" is given, we can write out its binary form, "1001110". This binary form has 4 '1's. The minimum integer, which is greater than "1001110" and also contains 4 '1's, is "1010011", i.e. "83", so you should output "83".
[align=left]Input[/align]
One integer per line, which is I (1 <= I <= 1000000).
A line containing a number "0" terminates input, and this line need not be processed.
[align=left]Output[/align]
One integer per line, which is J.
[align=left]Sample Input[/align]
1 2 3 4 78 0
[align=left]Sample Output[/align]
2 4 5 8 83 分析: 队列做法#include <iostream> #include <cmath> #include <queue> #include <cstdio> using namespace std; int bin[100]; int change(int num) { int k=0,l; queue<int>z; if(num==0) bin[0]=0; else { while(num>0) { z.push(num%2); num=num/2; } while(!z.empty()) { bin[k]=z.front(); k++; z.pop(); } l=k; } return l; } int main() { int a,b,count,i,k,j,p; while(cin>>a) { if(a==0)break; count=0; k=change(a); bin[k]=0; for(i=0; i<k; i++) { if(bin[i]==1&&bin[i+1]==0) { bin[i]=0; bin[i+1]=1; break; } else { if(bin[i]==1) { count++; bin[i]=0; } } } for(i=0; i<count; i++) bin[i]=1; count=0; for(i=k; i>=0; i--) { count+=bin[i]*pow(2.0,i); } cout<<count<<endl; } return 0; }
位运算做法:[code]#include <iostream>
using namespace std;
const int MAX_BIT=21;
int CountOne(int input)
{
int cnt=0;
for (int i=0;i<MAX_BIT;i++)
{
if(input>>i&1)//“>>”右移一位。本句话的意思是十进制数换成二进制数然后右移一位,判断是不是1,如果是cnt+1
cnt++;
}
return cnt;
}
int main()
{
int input;
while (cin>>input&&input!=0)
{
for (int ii=input+1;;ii++)
{
if(CountOne(ii)==CountOne(input))
{
cout<<ii<<endl;
break;
}
}
}
return 1;
}
[/code]
相关文章推荐
- hdu 5475 An easy problem
- hdu-An Easy Problem
- hdu 2055 An easy problem
- HDU 2055 An easy problem
- HDU 2601 An easy problem (数论)
- HDU-2601-An easy problem【思维】
- HDU 4729 An Easy Problem for Elfness (主席树,树上第K大)
- [HDU 5475] An easy problem (线段树)
- HDU-2055( An easy problem )
- HDU 5475 An easy problem(用大数模板,你就上当了)——2015 ACM/ICPC Asia Regional Shanghai Online
- ACM_HDU 2055 An easy problem
- HDU 5475 An easy problem (线段树)(单点更新,区间查询)2015ICPC 上海网赛
- HDU 5572 An Easy Physics Problem (计算几何 点类 线类 向量类 线段与圆相交)
- HDU 2601 An easy problem
- HDU 4729 An Easy Problem for Elfness(主席树)(2013 ACM/ICPC Asia Regional Chengdu Online)
- HDU 5572 An Easy Physics Problem(计算几何)——2015ACM/ICPC亚洲区上海站-重现赛
- HDU 2601 An easy problem (数学)
- HDU 2601 An easy problem(数学)
- hdu 2055 An easy problem (水题)
- hdu 4729 An Easy Problem for Elfness,函数式线段树