白菜君の三角形T 3180計ニンニク客
7703 ワード
情報学入門試合18この問題を書いてください.タイトルリンク
白菜君もこのゲームに加わって、今はルールが少し変わった.現在、直角三角形の斜辺としてnの長さの棒がある.ニンニク君、ブロッコリー妹、白菜君は多くの整数の長さの棒の中から3本を選んで、それぞれa,b,cに成長します.現在、ニンニク君とブロッコリー妹の棒は直角辺a+bを構成し、白菜君は別の直角辺cを構成し、a+b≦cを要求している.すみません、全部で何種類の棒を取る案がありますか?ヒント:a=3,b=4はa=4,b=3と同じスキームとする.入力フォーマット入力は1行で、整数nであり、1≦n≦106出力フォーマット出力は1行であり、整数であり、棒を取るシナリオ数である.
サンプル入力1 5サンプル出力1 1
サンプル入力2 26サンプル出力2 5
問題を書くときはまずlong longを使うことを宣言し、フォーマットの説明子は%lldであることに注意しなければならない.これは必ず注意しなければならない.忘れやすい.実は、問題を書く過程でfloor関数を使うことも重要だと思います.floor関数はdouble floor(double a)にプロトタイプされ、aより小さい最大整数を返します.floor関数を使うとは思いもよらなかった場合はsqrt関数でもいいし、判断するとsqrt(a)*sqrt(a)=a.三辺長が確定した後、このデータのセットのシナリオ数は(a+b)/2である.理由は?君の推測
コードは次のとおりです.
もう一つfloorを使わないバージョンがあります
ところで、上のコードはc言語のように見えます.ただし、提出するときは必ずc++に設定して提出しないと通過しません.
白菜君もこのゲームに加わって、今はルールが少し変わった.現在、直角三角形の斜辺としてnの長さの棒がある.ニンニク君、ブロッコリー妹、白菜君は多くの整数の長さの棒の中から3本を選んで、それぞれa,b,cに成長します.現在、ニンニク君とブロッコリー妹の棒は直角辺a+bを構成し、白菜君は別の直角辺cを構成し、a+b≦cを要求している.すみません、全部で何種類の棒を取る案がありますか?ヒント:a=3,b=4はa=4,b=3と同じスキームとする.入力フォーマット入力は1行で、整数nであり、1≦n≦106出力フォーマット出力は1行であり、整数であり、棒を取るシナリオ数である.
サンプル入力1 5サンプル出力1 1
サンプル入力2 26サンプル出力2 5
問題を書くときはまずlong longを使うことを宣言し、フォーマットの説明子は%lldであることに注意しなければならない.これは必ず注意しなければならない.忘れやすい.実は、問題を書く過程でfloor関数を使うことも重要だと思います.floor関数はdouble floor(double a)にプロトタイプされ、aより小さい最大整数を返します.floor関数を使うとは思いもよらなかった場合はsqrt関数でもいいし、判断するとsqrt(a)*sqrt(a)=a.三辺長が確定した後、このデータのセットのシナリオ数は(a+b)/2である.理由は?君の推測
コードは次のとおりです.
#include
#include
int main()
{
long long n;
scanf("%lld",&n);//
long long i;
int ans=0;
double ex;
for(i=1;i<n;i++)// a+b
{
ex=sqrt(n*n-i*i);//ex c
if(ex==floor(ex))// ex c
{
if(ex>=i)// c>=a+b
ans+=i/2;
}
}
printf("%d
",ans);
return 0;
}
もう一つfloorを使わないバージョンがあります
#include
#include
int main()
{
long long n,i,j,k;
int ans=0;
scanf("%lld",&n);
long long xixi;
for(i=1;i<n;i++)
{
k=n*n-i*i;
xixi=sqrt(n*n-i*i);
if(k==xixi*xixi)
{
if(xixi>=i)
{
ans+=i/2;
}
}
}
printf("%d
",ans);
return 0;
}
ところで、上のコードはc言語のように見えます.ただし、提出するときは必ずc++に設定して提出しないと通過しません.