Java Web学習—プログラミング1:デジタル三角形+3種類の解題構想+詳細法則
15003 ワード
问题如下図:1 3 2 4 5 6 10 9 7……入力3 2出力5个人分析:この问题、私は3种类の方式を采用して求めて、第1种は表を打つことを通じて(通って)、まずすべての数を配列の中で入れて、それからその行のこの列の値を出力して、しかしテーマの意味とあまり一致しないで、行数を考虑しないならば、配列のは境界があるのです!
2つ目は、式によって順番の各行の最後の最大値(S型計画ではない~~~)を求めることです.例えば、1行目は1、2行目は3行目は6行目は4行目は10...
各行の最初の値の式は(x*(x+1)/2です.ここでは、入力が最初の行の最初の列から始まることに対応します.0から始まる場合、式:(x*(x-1)/2
3番目と2番目は似ていますが、2つのforサイクルで各行の最後の最大値(2番目と同じ)を求めただけです.
2番目と3番目の法則について:
コード内のnum 1は行数num 2を表し、列数resは結果を表す
1 3 2 4 5 6 10 9 8 7偶数行であれば、結果=結果-(列数-1)例えば2行目、私は2行1列の数resが最初=3で、res=3-(1-1)=3であることを要求します.奇数行であれば、結果=結果-(行数-列数)例えば3行目、私は3行2列の数resが最初=6で、res=6-(3-2)=5であることを要求します.詳細コードは次のとおりです.
1つ目のコードが比較的長い打表法:
2番目の式は、各行の最大値を求め、法則によってその列の値を求めます.
3つ目は法則を探して結果を求める方法です.
2つ目は、式によって順番の各行の最後の最大値(S型計画ではない~~~)を求めることです.例えば、1行目は1、2行目は3行目は6行目は4行目は10...
各行の最初の値の式は(x*(x+1)/2です.ここでは、入力が最初の行の最初の列から始まることに対応します.0から始まる場合、式:(x*(x-1)/2
3番目と2番目は似ていますが、2つのforサイクルで各行の最後の最大値(2番目と同じ)を求めただけです.
2番目と3番目の法則について:
コード内のnum 1は行数num 2を表し、列数resは結果を表す
1 3 2 4 5 6 10 9 8 7偶数行であれば、結果=結果-(列数-1)例えば2行目、私は2行1列の数resが最初=3で、res=3-(1-1)=3であることを要求します.奇数行であれば、結果=結果-(行数-列数)例えば3行目、私は3行2列の数resが最初=6で、res=6-(3-2)=5であることを要求します.詳細コードは次のとおりです.
// 1 ,
if(num1%2==0)
{
res-=num2-1;
}
//
else
{
res-=(num1-num2);
}
1つ目のコードが比較的長い打表法:
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
int a[][]=new int [10000][10000];
int res=1;
Scanner sc=new Scanner(System.in);
for(int i=1;i<=1000;i++)
{
if(i%2==1)
{
for(int j=1;j<=i;j++)
{
a[i][j]=res;
res++;
}
}
else
{
for(int j=i;j>=1;j--)
{
a[i][j]=res;
res++;
}
}
}
int num1=sc.nextInt();
int num2=sc.nextInt();
System.out.print(a[num1][num2]+" ");
}
}
2番目の式は、各行の最大値を求め、法則によってその列の値を求めます.
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
int res=0;
Scanner sc=new Scanner(System.in);
int num1=sc.nextInt();
int num2=sc.nextInt();
res=(num1*(num1+1))/2;
// 1 ,
if(num1%2==0)
{
res-=num2-1;
}
//
else
{
res-=(num1-num2);
}
System.out.println(res);
}
}
3つ目は法則を探して結果を求める方法です.
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
int res=0;
Scanner sc=new Scanner(System.in);
int num1=sc.nextInt();
int num2=sc.nextInt();
for(int i=1;i<=num1;i++)
{
for(int j=1;j<=i;j++)
{
res++;
}
}
// 1 ,
if(num1%2==0)
{
res-=num2-1;
}
//
else
{
res-=(num1-num2);
}
System.out.println(res);
}
}
,