Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

AnEasyProblem: Difference between revisions

From ZeroWiki
imported>novaman
No edit summary
 
imported>qa22ahj
No edit summary
 
(11 intermediate revisions by 4 users not shown)
Line 1: Line 1:
Describe AnEasyProblem here / 권순의
[http://poj.org/problem?id=2453 원문보기]
== Description ==
아시다시피, 데이터는 컴퓨터에 이진수 형태로 저장됩니다. 우리가 토론할 문제는 양의 정수와 이 수의 이진 형태입니다.


=== Source ===
양의 정수 I가 주어지면, 당신이 할 일은 I보다 큰 수 중 가장 작은 수 J를 찾습니다. I의 이진수 형태에서의 1의 개수와 J의 이진수 형태에서의 1의 개수는 일치합니다.
#include <IOStream>
 
  #include <cmath>
예를들어, "78"이 주어지면, 여러분은 "1001110"과 같은 이진수 형태로 쓸 수 있습니다. 이 이진수는 4개의 1을 가지고 있습니다. "1001110" 보다 크고 4개의 1을 포함하는 가장 작은 정수는 "1010011"입니다. 출력값은 "83"이 되어야 합니다.
   
 
  using namespace std;
=== Input ===
   
각 줄에 한개의 정수를 입력할 수 있습니다. (1 <= I <= 1000000)
  int main()
0이 나오면 입력을 종료합니다. 이 줄은 작업할 필요 없습니다.
  {
 
int getNum = -1;
=== Output ===
int getBinary[21];
각 줄에 한개의 정수를 출력하면 됩니다.
int min = 0;
 
int output = 0;
=== Sample Input ===
   
  1
while(getNum != 0)
  2
{
  3
cin &gt;&gt; getNum;
  4
   
  78
for(int i = 0; i &lt; 21; i++)
  0
{
=== Sample Output ===
getBinary[i] = 0;
  2
}
4
5
if((getNum &gt; 0) &amp;&amp; (getNum &lt;= 1000000))
8
{
  83
for(int i = 0; i &lt; 21; i++)
== 풀이 ==
{
{| class="wikitable"
getBinary[i] = getNum % 2;
|-
getNum /= 2;
| 작성자
cout &lt;&lt; getBinary[i];
| 사용언어
}
| 개발시간
| 코드
cout &lt;&lt; endl;
|-
| [[권순의]]
getNum = 1;
| -
| -
for(int i = 0; i &lt; 21; i++)
| [[AnEasyProblem/권순의|An Easy Problem/권순의]]
{
|-
if(getBinary[i] == 1)
| [[김태진]]
{
| -
if(getBinary[i + 1] == 0)
| -
{
| [[AnEasyProblem/김태진|An Easy Problem/김태진]]
getBinary[i + 1] = 1;
|-
getBinary[i] = 0;
| [[정진경]]
i++;
| -
}else{
| -
getBinary[i] = 0;
| [[AnEasyProblem/정진경|An Easy Problem/정진경]]
getBinary[min++] = 1;
|}
}
 
}
----
[[문제분류]],[http://poj.org/problem?id=2453 An Easy Problem ], [[ACM_ICPC/2011년스터디]]
cout &lt;&lt; getBinary[i];
output += (int)(getBinary[i] * pow(2.0, i));
}
cout &lt;&lt; endl &lt;&lt; output &lt;&lt; endl;
}else if(getNum == 0){
break;
}else{
cout &lt;&lt; "잘못된 입력입니다." &lt;&lt; endl;
break;
}
}
return 0;
}



Latest revision as of 02:08, 16 November 2013

원문보기

Description

아시다시피, 데이터는 컴퓨터에 이진수 형태로 저장됩니다. 우리가 토론할 문제는 양의 정수와 이 수의 이진 형태입니다.

양의 정수 I가 주어지면, 당신이 할 일은 I보다 큰 수 중 가장 작은 수 J를 찾습니다. I의 이진수 형태에서의 1의 개수와 J의 이진수 형태에서의 1의 개수는 일치합니다.

예를들어, "78"이 주어지면, 여러분은 "1001110"과 같은 이진수 형태로 쓸 수 있습니다. 이 이진수는 4개의 1을 가지고 있습니다. "1001110" 보다 크고 4개의 1을 포함하는 가장 작은 정수는 "1010011"입니다. 출력값은 "83"이 되어야 합니다.

Input

각 줄에 한개의 정수를 입력할 수 있습니다. (1 <= I <= 1000000) 0이 나오면 입력을 종료합니다. 이 줄은 작업할 필요 없습니다.

Output

각 줄에 한개의 정수를 출력하면 됩니다.

Sample Input

1
2
3
4
78
0

Sample Output

2
4
5
8
83

풀이

작성자 사용언어 개발시간 코드
권순의 - - An Easy Problem/권순의
김태진 - - An Easy Problem/김태진
정진경 - - An Easy Problem/정진경

문제분류,An Easy Problem , ACM_ICPC/2011년스터디