每隔2个数删除一个数的删数问题

问题:有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。

输入:数组的长度,如8;输出:6

下面是我的解决办法:

说明:countDel用来算删除的数的个数;count用来计算两数的间隔;i 是遍历数组的游标; l(length)是数组的长度

采用下标标记,将删除的数的下标赋值为-1,遍历数组,当遇到值非-1的就用count计数,count累计为3时,说明当前的这个下标对应的数应当被删除(对应的值置为-1),这时也要累计删除的个数countSize并将count清0。

遍历数组时,当游标 i 等于数组长度时,模掉数组长度,如此循环,直到countDel=数组长度时,跳出遍历循环,返回的 i-1  就是最后一个被删除的数的下标。下面附上java的实现:

import java.util.Scanner;

/**

* @author Administrator

*/

public class CountIndex {

    public static void main(String[] args) {

      Scanner scanner = new Scanner(System.in);

      int length;

     while (scanner.hasNextInt()) {

            length = scanner.nextInt();

           int[] index = new int[length];

          System.out.println(coutIndex(length, index));

     }

}

public static int coutIndex(int l, int[] index) {

    int i = 0;

    int count = 0;

    int countDel = 0;

    while (true) {

        if (countDel == l) {

           return i - 1;

        }

       if (i == l) {

            i = i % l;

       }

      if (index[i] != -1) {

           count++;

      }

     if (count == 3) {

          count = 0;

          countDel++;

         index[i % l] = -1;

        }

     i++;

    }

  }

}

可以访问的我的简书 删数问题

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以在循环内部判断是否是最后一个元素,如果是则不输出空格。示例代码如下: ``` #include <stdio.h> int main() { int n = 10; for (int i = 1; i <= n; i++) { printf("%d", i); if (i != n) { printf(" "); } } return 0; } ``` 这样就可以避免在结尾输出多余的空格了。 ### 回答2: 要删除循环输出结尾的一个空格,我们可以通过使用判断条件进行控制。一种方法是在每次输出内容后判断是否为最后一个元素,如果是,则不输出空格。下面是具体实现的示例代码: ```c #include <stdio.h> int main() { int nums[] = {1, 2, 3, 4, 5}; int length = sizeof(nums) / sizeof(nums[0]); for (int i = 0; i < length; i++) { printf("%d", nums[i]); if (i < length - 1) { printf(" "); // 如果不是最后一个元素,则输出空格 } } return 0; } ``` 在这个示例代码中,我们使用了一个整型数组 `nums` 来代表需要输出的元素。首先计算了数组的长度并存储在 `length` 变量中。然后通过 `for` 循环遍历了数组的每个元素。 在每次输出元素后,使用 `if` 条件语句进行判断,判断当前元素是否为最后一个元素。如果是最后一个元素,则不输出空格。否则,输出一个空格,用于分隔不同的元素。 这样就能够在每次输出元素间正确地添加空格,而在最后一个元素后不添加空格,实现删除循环输出结尾的一个空格的效果。 ### 回答3: 在C语言中,要想删去循环输出结尾的一个空格,可以采用以下几种方法: 1. 使用一个标志变量来判断是否为循环的最后一次输出。在循环开始之前,将标志变量初始化为0。当循环到达最后一次输出时,将标志变量赋值为1,在输出语句前加入一个判断条件,判断标志变量是否为1,如果是,则不输出空格。例如: ```c int n = 10; // 循环次 int flag = 0; // 标志变量,初始值设为0 for (int i = 1; i <= n; i++) { if (i == n) { flag = 1; // 如果是最后一次输出,将标志变量设为1 } printf("%d", i); if (flag != 1) { printf(" "); } } ``` 2. 利用循环终止条件来判断是否为最后一次输出。在循环结束后,通过判断终止条件是否满足来决定是否输出空格。例如: ```c int n = 10; // 循环次 for (int i = 1; i <= n; i++) { printf("%d", i); if (i != n) { printf(" "); } } ``` 3. 使用一个变量来记录循环执行的次。通过判断计变量的值是否等于循环次来决定是否输出空格。例如: ```c int n = 10; // 循环次 int count = 0; // 计变量,初始值设为0 for (int i = 1; i <= n; i++) { printf("%d", i); count++; if (count != n) { printf(" "); } } ``` 以上是几种常用的方法,可以根据具体的需求选择合适的方式来删去循环输出结尾的一个空格。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值