HDoj 2502月の数
1892 ワード
月の数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7727 Accepted Submission(s): 4560
Problem Description
寒月がまだ大学1年生の時、彼は武林の秘籍の中で(後に考証して、コンピュータの基礎だと推定して、狂汗-ing)、不思議なバイナリ数を発見しました.
正の整数mがバイナリとして表される場合、そのビット数はn(プリアンブル0を含まない)であり、寒月はnバイナリ数と呼ぶ.すべてのn 2進数のうち,1の総個数をnに対応する月の数と呼ぶ.
例えば、3進数は合計4個で、それぞれ4(100)、5(101)、6(110)、7(111)であり、これらのうち1個の数は合計1+2+2+3=8であるため、3に対応する月の数は8である.
Input
入力データのグループ数を表す整数Tを与え、次にT行があり、各行に正の整数n(1<=n<=20)が含まれます.
Output
n毎に、nに対応する月の数を1行に出力する.
Sample Input
3
1
2
3
Sample Output
1
3
8
探しようがない 不器用な方法で 各数値をバイナリ計算1の個数に変換
nごとに対応する月の数が発見されたので その十進数はいずれも2のn-1次方から2のn次方の間にある.
神の考え:
考え方:Nの全バイナリ数はm=2^(N-1)個である.第1の縦列は全部でm個の1があり、その後の第2~Nの縦列のうち、1と0がそれぞれ半分を占め、
全部で(N-1)*m/2個1あります.従って結果ans=m+(N−1)*m/2であった.例えばN=4:N=4: 1000 1001 1010 1011 1100 1101 1110 1111
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7727 Accepted Submission(s): 4560
Problem Description
寒月がまだ大学1年生の時、彼は武林の秘籍の中で(後に考証して、コンピュータの基礎だと推定して、狂汗-ing)、不思議なバイナリ数を発見しました.
正の整数mがバイナリとして表される場合、そのビット数はn(プリアンブル0を含まない)であり、寒月はnバイナリ数と呼ぶ.すべてのn 2進数のうち,1の総個数をnに対応する月の数と呼ぶ.
例えば、3進数は合計4個で、それぞれ4(100)、5(101)、6(110)、7(111)であり、これらのうち1個の数は合計1+2+2+3=8であるため、3に対応する月の数は8である.
Input
入力データのグループ数を表す整数Tを与え、次にT行があり、各行に正の整数n(1<=n<=20)が含まれます.
Output
n毎に、nに対応する月の数を1行に出力する.
Sample Input
3
1
2
3
Sample Output
1
3
8
探しようがない 不器用な方法で 各数値をバイナリ計算1の個数に変換
nごとに対応する月の数が発見されたので その十進数はいずれも2のn-1次方から2のn次方の間にある.
#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAX 1100000
int main()
{
int n,m,j,i,s,t,l;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
s=0;
for(i=pow(2,n-1);i<pow(2,n);i++)
{
m=i;
while(m)
{
if(m%2==1)
s++;
m/=2;
}
}
printf("%d
",s);
}
return 0;
}
神の考え:
考え方:Nの全バイナリ数はm=2^(N-1)個である.第1の縦列は全部でm個の1があり、その後の第2~Nの縦列のうち、1と0がそれぞれ半分を占め、
全部で(N-1)*m/2個1あります.従って結果ans=m+(N−1)*m/2であった.例えばN=4:N=4: 1000 1001 1010 1011 1100 1101 1110 1111
#include <cstdio>
#include <cmath>
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
m=pow(2,n-1);
printf("%d
",m+(n-1)*m/2);
}
return 0;
}