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   ,      
	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);
	}
}