第一题:如何让我的数组里的9和 17 打印出行是9行列是 17 列的图形,为什么我打印的总是少一行,而且列也是不对,是不是越界了?public class tuxing {
public static void main(String[] args){
int[][] tt = new int[9][17];
for(int i = 0;i < tt.length;i++){
for(int j = 0;j < tt.length - i;j++)
System.out.print(" ");
for(int j = 0;j < 2 * i - 1;j++)
System.out.print('*');
System.out.println();
}
}
}第二题:我只会用这种苯方法实现求阶乘,请问如果用递归的方法,这道题应该怎样做呢?public class jiecheng {
public static void main(String[] args){
long t = 1;
long sum = 1;
do{
sum *= t;
t++;
}while(t <= 15);
System.out.println("15的阶乘是:" + sum);
}
}第三题:从控制台输入两个数,求最大公约数import java.util.Scanner;
public class gys {
public static void main(String[] args){
System.out.print("请输入两个整数:");
Scanner scan = new Scanner(System.in);
int c;
int a = scan.nextInt();
int b = scan.nextInt();
System.out.println("两个数的最大公约数是:");
}
}第一问:这道题中的 '*' 和 "*" 打印出来的效果一样,但是如果从理论上说是不同的,但是具体怎么不同,我也说不出来,如果有哪位高手知道,希望不吝赐教!第二问:还是这道题,就是 b[0].length 和 b[i].length 在这道题里显示的效果是相同的,但是 [i] 和 [0] 是不同的 [0] 是数组的第一个下标,而 [i] 是根据数组的大小而定,请问为什么 [i] 和 [0] 在这道题里的效果是一样的?int[][] b = new int[5][7];
for (int x = 0;x < b.length; x++) {
for(int y = 0;y < b[0].length;y++) {
System.out.print('*');
public static void main(String[] args){
int[][] tt = new int[9][17];
for(int i = 0;i < tt.length;i++){
for(int j = 0;j < tt.length - i;j++)
System.out.print(" ");
for(int j = 0;j < 2 * i - 1;j++)
System.out.print('*');
System.out.println();
}
}
}第二题:我只会用这种苯方法实现求阶乘,请问如果用递归的方法,这道题应该怎样做呢?public class jiecheng {
public static void main(String[] args){
long t = 1;
long sum = 1;
do{
sum *= t;
t++;
}while(t <= 15);
System.out.println("15的阶乘是:" + sum);
}
}第三题:从控制台输入两个数,求最大公约数import java.util.Scanner;
public class gys {
public static void main(String[] args){
System.out.print("请输入两个整数:");
Scanner scan = new Scanner(System.in);
int c;
int a = scan.nextInt();
int b = scan.nextInt();
System.out.println("两个数的最大公约数是:");
}
}第一问:这道题中的 '*' 和 "*" 打印出来的效果一样,但是如果从理论上说是不同的,但是具体怎么不同,我也说不出来,如果有哪位高手知道,希望不吝赐教!第二问:还是这道题,就是 b[0].length 和 b[i].length 在这道题里显示的效果是相同的,但是 [i] 和 [0] 是不同的 [0] 是数组的第一个下标,而 [i] 是根据数组的大小而定,请问为什么 [i] 和 [0] 在这道题里的效果是一样的?int[][] b = new int[5][7];
for (int x = 0;x < b.length; x++) {
for(int y = 0;y < b[0].length;y++) {
System.out.print('*');
for(int j = 0;j < tt.length - i;j++)
这边问题不小,一般用i和行数9比较,j和列数17比较二。 f(n) = n * f(n-1) ;
f(1) = 1 ;三。 选a,b中较小的,如果a<b,那么
for(int i = a ; i > 0 ; i-- )
{
如果i能整除a和b,那么i就是他们的最小公约数。
}
循环结束还没找到这个公约数,那公约数就是1
int r;
while(b!=0) {
r = a % b;
a = b;
b = r;
}
return a;
}
for(int j = 1;j <=17;j++)
你要从1开始就不会少了.
{
public static void main(String[] args)
{
int [][] t=new int[9][17];
for(int i=1;i<=t.length;i++)
{
for(int j=0;j<t.length-i;j++)
System.out.print(" ");
for(int k=0;k<2*i-1;k++)
System.out.print("*");
System.out.println();
}
}
}边界问题。for循环的初始值和边界值没有设好。
1+3+5 = 9 = 3^2 = ((5+1)/2)^2
...
1+3+5+..+n = ((n+1)/2)^2final int LINE = 9;
int k = 1;
String str = "";
for (int j = 0; j < LINE - k; j++) {
str += " ";
}
System.out.print(str);
for (int i = 0, sum = LINE * LINE; i < sum; i++) {
if (k * k == i) {
System.out.print("\n" + str.substring(k));
k++;
}
System.out.print("*");
}这个实现虽然长了些,都是为了输出左边的空格,如果没有空格的话的,一个循环就可以搞定了。
算法二(根据左右对称来实现):final int LINE = 9;
for (int i = 0; i < LINE; i++) {
for (int j = -(LINE - 1); j <= i; j++) {
System.out.print(Math.abs(j) <= i?"*":" ");
}
System.out.println();
}当然了,实现这样的图形有很多的算法,喜欢哪一种呢?
public static int divisor(int m, int n){
if(m%n == 0)
return n;
else
return divisor(n, m%n);
}
final int LINE = 9;
for (int i = 0; i < LINE; i++) {
for (int j = -(LINE - 1); j <= i; j++) {
System.out.print(Math.abs(j) <= i ? "*" : " ");
}
System.out.println();
}
public class gys {
public static void main(String[] args){
System.out.print( "请输入两个整数: ");
Scanner scan = new Scanner(System.in);
int c;
int a = scan.nextInt();
int b = scan.nextInt();
if ( a > 0 && b > 0 )
{
c = a % b;
while (c != 0)
{
a = b;
b = c;
c = a % b;
}
System.out.println( "两个数的最大公约数是: " + b );
}
else
System.out.println( "输入错误" );}
}