/* 打印图形
********
********
********
********
*/
class Demo01{
public static void main(String[] args) {
//第一种写法
for(int i=1;i<=4;i++){ //外层循环控制打印的行数为4行
System.out.println("********"); //每行打印的内容换行
}
System.out.println("============");
//第二种写法
for(int i=1;i<=4;i++){ //外层循环控制打印的行数为4行
for(int j=1;j<=8;j++){ //内层循环控制每行的列数为8列
System.out.print("*"); //每列的内容不换行
}
System.out.println(); //内层循环每结束一次也就是打印一行就换行
}
}
/*打印下列图形
* * ****** ******
** ** ***** *****
*** *** **** ****
**** **** *** ***
***** ***** ** **
****** ****** * *
*/
class Demo02{
public static void main(String[] args) {
//第一个图形
for(int i=1;i<=6;i++){ //i 表示行数控制打印多少行
for(int j=1;j<=i;j++){ //内循环控制列数,且每行的列数随行数的增加而增加
System.out.print("*");
}
System.out.println(); //每打印一行执行换行语句
}
System.out.println("============");
//第二个图形
for(int i=1;i<=6;i++){
//先打印空格
for(int k=1;k<=6-i;k++){ //第一个内循环控制每行的空格数,随行号增加1而减少1
System.out.print(" ");
}
for(int j=1;j<=i;j++){ //第二个内循环控制打印的*列数,随行号增加1而增加1
System.out.print("*");
}
System.out.println();
}
System.out.println("============");
//第三个图形 与第一个图形相似
for(int i=6;i>=1;i--){
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
System.out.println("=============");
//第四个图形 与第二图形相似
for(int i=1;i<=6;i++){
for(int k=1;k<=i-1;k++){
System.out.print(" ");
}
for(int j=1;j<=7-i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
/* 打印图形 i j k i j
* 1 1 * 5 1 1
** 2 2 ** 4 2 2
*** 3 3 *** 3 3 3
**** 4 4 **** 2 4 4
***** 5 5 ***** 1 5 5
****** 6 6 ****** 0 6 6
***** 7 5 ***** 1 7 5
**** 8 4 **** 2 8 4
*** 9 3 *** 3 9 3
** 10 2 ** 4 10 2
* 11 1 * 5 11 1
*/
class Demo03{
public static void main(String[] args) {
//第一个图形
for(int i=1;i<=11;i++){
for(int j=1;j<=i&&(i+j)<=12;j++){ //该图形的列数是随着行号的增加呈现先增在减的趋势的,且为对称图形,所以可以取最中间一行作为分水岭,且当行号大于第六行时,每行的行号加上该行的列数都为一个固定值,所以判断条件有两个必须同时满足
System.out.print("*");
}
System.out.println();
}
System.out.println("============");
//第二个图形
for(int i=1;i<=9;i++){
//先打印空格
for(int k=1;k<=Math.abs(i-5);k++){//该图形的空格列数是随着行号的增加呈现先减再增的趋势的,且为对称图形,所以可以取最中间一行作为分水岭,因为中间空格数为0.此时考虑绝对值,空格数的区间在[-5.5]之间,所以可以用i-5取绝对值得方法来得到数字的变化,其中Math.abs()是对一个数求绝对值
System.out.print(" ");
}
for(int j=1;j<=i&&(i+j)<=10;j++){ //与图一原理相同
System.out.print("*");
}
System.out.println();
}
}
}
/* 打印图形
* * 1
* * * * 1 2
* * * * * 1 3
* * * * * * 1 4
* * * * * * * 1 5
* * * * * * 1 4
* * * * * 1 3
* * * * 1 2
* * 1
*/
class Demo04{
public static void main(String[] args) {
//第一个图形
for(int i=1;i<=9;i++){
for(int k=1;k<=Math.abs(i-5);k++){
System.out.print(" ");
}
for(int j=1;j<=i&&(i+j)<=10;j++){ //此图形是Demon03程序中第二个图形的变体
System.out.print("* "); //在此处每打印一个*后面多加一个空格就可形成菱形
}
System.out.println();
}
System.out.println("============");
//第二个图形
for(int i=1;i<=9;i++){
for(int k=1;k<=Math.abs(i-5);k++){
System.out.print(" ");
}
for(int j=1;j<=i&&(i+j)<=10;j++){
if(j==1||j==i||j+i==10){
System.out.print("* "); //此图形与图一相似,图中已经给出具体的特殊位置,只要将特殊的位置打印其他为空就可以了
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
/*
求两个数的最大公约数
*/
import java.util.Scanner;
class Demon05{
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
System.out.print("请输入两个数字:"); //提示用户输入两个数字
int a=scanner.nextInt();
int b=scanner.nextInt(); //接受用户输入的两个整数
int gcd=1;
//首先判断两个数中谁最小,用最小的数做循环的继续条件,这里用到一个三元运算符,直接将最小的数作为返回结果给了判断条件
for(int i=2;i<=(b<a?b:a);i++){
if(a%i==0 && b%i==0){ // 从1开始找都能被两个整数整除的因子,如果余数为0,表示此i的值为两个数的因子
gcd=i; //此时的i值并不是最大的,要继续查找直到循环结束
}
}
System.out.println(gcd); //最后显示最大的公约数
}
}
import java.util.Scanner;
class Demon06{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入要打印的层数:"); //提示用户输入打印的层数
int x = in.nextInt(); //接受用户输入的数字
for(int i=1;i<=x;i++){ //将数字传进来控制打印的行数
for(int k=1;k<=x-i;k++){ //空格随行值增加而减少
System.out.print(" ");
}
for(int j=-(i-1);j<=i-1;j++){ //每行数字先减再加
System.out.print(Math.abs(j)+1+" "); //因为从j负数开始,所以要对j取绝对值
}
System.out.println();
}
}
}
class Demon07{
public static void main(String[] args) {
for(int i=1;i<=10000;i++){
int sum=0; //每个数都有一个和
for(int j=1;j<=i/2;j++){ //找出一个被除数一半以下的数的除数就可以判断该被除数有哪些除数
if(i%j==0){ //如果该j的取值能被i整除,即为i的除数
sum+=j; //将其所有的除数相加
}
}
if(sum==i){ //如果该数的所有除数相加的和等于它本身,则为完全数
System.out.println(i);
}
}
}
}
class Demon08{
public static void main(String[] args){
/*
0
0 1 0
0 1 2 1 0
0 1 2 3 2 1 0
*/
for(int i=1;i<=8;i++){ //总共为8行
for(int k=1;k<=8-i;k++){ //每行空格数减一
System.out.print(" "); //因为随着数组位数增加所占宽度越大,所以给每位数之间分配4个空格
}
for(int j=-(i-1);j<=i-1;j++){ //用区间表示每行的列数
System.out.printf("%-4.0f",Math.pow(2,i-1-Math.abs(j))); // 每行的数组都是2的多少次幂,且如上分析是先加再增,所以对幂取区间差的绝对值
}
System.out.println();
}
}
}