1.今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举一个人作为出游的临时队长。为了体现合理公平,大家提出了一个比较有趣的规则。所有人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,剩下的人继续报数,最后留下的当选为队长。请你通过编写程序,求出一组人中的队长是原来第几位同学。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("有多少名学生:");
int[] stuAll = new int[input.nextInt()];
//创建的数组默认值都是0 所以必须得给每个值赋编号
for (int i = 0; i < stuAll.length; i++) {
stuAll[i] = i+1;
}
//计算到第几个数
int count = 0;
//剩余学生的人数
int sc=stuAll.length;
while(sc>1) {
for (int i = 0; i < stuAll.length; i++) {
if(stuAll[i]!=-1) {
count++;
}
if(count==3) {
//当数到3时 设置当前下标值为-1
stuAll[i] = -1;
sc--;
count = 0;
}
}
}
for (int i = 0; i < stuAll.length; i++) {
if(stuAll[i]!=-1) {
System.out.println(stuAll[i]);
}
}
}
2.给定一个数组nums,编写一个函数将所有0 移动到数组的末尾,同时保持非零元素的相对顺序。示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
2.1可以使用2个指针 while循环 2个指针下标同时从头开始 1号指针遇到0前进 2号指针等1号指针遇到不是0的将1号指针的值赋给2号指针 然后2个指针同时前进,可以将不是0的全部移动到前面
1号肯定比2号指针更早的到达终点 while循环结束的条件就是1号指针到达终点即不是0的已全部移动到前面 二号指针往后的肯定都是0
在用for循环对二号指针后的进行赋值 for(int i = 一号指针;i<num.length;i++) 赋值为0;就完成了
public static void main(String[] args) {
int[] num = {0,1,0,3,12};
int index1 = 0;
int index2 = 0;
while(index2<num.length) {
if(num[index2]!=0) {
num[index1]=num[index2];
index1++;
index2++;
}else {
index2++;
}
}
for (int i = index1; i < num.length; i++) {
num[i]=0;
}
for (int i = 0; i < num.length; i++) {
System.out.print(num[i]+"\t");
}
}
3.实现打印指定行数的空心菱形的功能
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数:");
//添加判断条件 如果是1或者不是奇数则不执行
if(input.hasNextInt()) {
int num = input.nextInt();
if(num>2 && num%2==1) {
starstar(num);
}else {
System.out.println("输入的数字不正确");
}
}else {
System.out.println("请重新输入");
}
//定义函数
}
public static void starstar(int num) {
//定义一个数组
String[] star = new String[num];
//将其中的全部设置为空格
for (int i = 0; i < star.length; i++) {
star[i]=" ";
}
//定义三个数 中间值 左边的下标 右边的下标
int centerindex = star.length/2;
int leftindex = 0;
int rightindex = 0;
for (int i = 0,j = star.length-1; i < star.length; i++,j--) {
//分为两部分 上面的一部分 下面的一部分
if(i<=centerindex) {
leftindex = centerindex - i;
star[leftindex] = "*";
rightindex= centerindex + i;
star[rightindex] = "*";
}else {
leftindex = centerindex - j;
star[leftindex] = "*";
rightindex = centerindex + j;
star[rightindex] = "*";
}
//输入每一行的情况
for (int j2 = 0; j2 < star.length; j2++) {
System.out.print(star[j2]);
}
System.out.println();
//在将这个下标的值设置为空
star[leftindex] = " ";
star[rightindex] = " ";
}
}