3-1 数组
3-1-1开灯问题
有n盏灯,编号为1~n。第一个人把所有灯打开,第二个人把所有编号为2的倍数的开关按下(这些灯将关闭)。第3个人按下所有编号为3的倍数的开关(开着的会关,关的会打开),依次类推。一共有k个人。问最后有哪些灯开着。输入n和k,输出开着的灯编号。k<=n<=1000;
样例输入:7 3
样例输出:1 5 6 7
import java.util.Scanner;
import java.util.HashSet;
import java.util.Set;
class calculate{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] light = new int[n];
for(int i = 0; i < n;i++){
light[i] = -1;
}
for(int i = 1;i<=k;i++){
for(int j = 0;j < n;j++){
if((j+1) % i == 0){
light[j] = -light[j];
}
}
}
for(int i = 0;i < n;i++){
if(light[i] > 0){
System.out.printf("%d ",(i+1));
}
}
}
}
3-1-2 蛇形填数
在n*n的方阵中填入1,2,3,4,5....,n*n,要求蛇形填数,例如 n = 4 时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
import java.util.Scanner;
class calculate{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a[][] = new int[n][n];
for(int i =0;i<n;i++){
for(int j = 0;j<n;j++){
a[i][j] = 0;
}
}
int temp = 1;
int x = 0;
int y = n-1;
a[x][y] = 1;
while(temp < n*n){
while(x < (n-1)&& a[x+1][y] == 0){a[++x][y] = ++temp;}
while(y-1 >= 0 && a[x][y-1] == 0){a[x][--y] = ++temp;}
while(x-1 >= 0 && a[x-1][y] == 0){a[--x][y] = ++temp;}
while( y+1 < n && a[x][y+1] == 0){a[x][++y] = ++temp;}
}
for(int i = 0;i<n;i++){
for(int j = 0;j<n;j++){
System.out.printf("%3d",a[i][j]);
}
System.out.printf("\n");
}
}
}