HDU 2156分数行列【水題】【繰返し】
1511 ワード
ぶんすうマトリクス
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4769 Accepted Submission(s): 2882
Problem Description
行列を定義します.
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
行列対角線上の要素は常に1/1であり,対角線の両側の点数の分母は1つずつ増加する.
この行列の合計を要求する.
Input
行ごとに与えられた整数N(N<50000)は、行列がN*Nであることを示し、Nが0であると入力が終了する.
Output
答えを出力し、2桁の小数を保持します.
Sample Input
1
2
3
4
0
Sample Output
1.00
3.00
5.67
8.83
Author
Wiskey
Source
2008情報工学部合宿チーム-選抜試合
あなたに1つの定义の点数の行列をあげて(上述のように)、その各种の上の点数の和を求めます.
考え方:直接計算するのは面倒で、法則を探して解決します.
N=1,N=2,N=3の場合を考える.
1/1 1/1 1/2 1/1 1/2 1/3
1/2 1/1 1/2 1/1 1/2
1/3 1/2 1/1
右下の部分が増えました.法則を探すことによって、右下角はすべて1で、1を除いて、1/2+1/3+...+1/Nの2倍であることが分かった.
これで直接押せばいいです.numを用いて2倍の1/2+1/3+...+1/Nを計算した.結果は配列a[]で計算される.
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4769 Accepted Submission(s): 2882
Problem Description
行列を定義します.
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
行列対角線上の要素は常に1/1であり,対角線の両側の点数の分母は1つずつ増加する.
この行列の合計を要求する.
Input
行ごとに与えられた整数N(N<50000)は、行列がN*Nであることを示し、Nが0であると入力が終了する.
Output
答えを出力し、2桁の小数を保持します.
Sample Input
1
2
3
4
0
Sample Output
1.00
3.00
5.67
8.83
Author
Wiskey
Source
2008情報工学部合宿チーム-選抜試合
あなたに1つの定义の点数の行列をあげて(上述のように)、その各种の上の点数の和を求めます.
考え方:直接計算するのは面倒で、法則を探して解決します.
N=1,N=2,N=3の場合を考える.
1/1 1/1 1/2 1/1 1/2 1/3
1/2 1/1 1/2 1/1 1/2
1/3 1/2 1/1
右下の部分が増えました.法則を探すことによって、右下角はすべて1で、1を除いて、1/2+1/3+...+1/Nの2倍であることが分かった.
これで直接押せばいいです.numを用いて2倍の1/2+1/3+...+1/Nを計算した.結果は配列a[]で計算される.
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
double a[50010];
int main()
{
double num = 0;
for(int i = 1; i <= 50000; ++i)
{
if(i == 1)
a[i] = 1;
else
{
num += 2.0/i;
a[i] = a[i-1] + num + 1;
}
}
int N;
while(cin >> N && N)
{
printf("%.2lf
",a[N]);
}
return 0;
}