认真专注坚持


私信TA

用户名:dotcpp0695321

访问量:261

签 名:

等  级
排  名 12664
经  验 962
参赛次数 0
文章发表 4
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:给一个数组在里面随便赋非零的值,遍历每个元素,如果这个元素不是零,就报数+1存起来;报的数如果是3的倍数,那就把这个元素标记一下,给他赋为零,以便下次报数的不再为这个元素报数。用循环直到只剩一个非零的元素,就完了

注意事项:多次循环,直到剩一个非零的元素

参考代码:

void main()

{

          int arr1[1000]={0};

          int n=0;////////////输入的数

          int i=0;///////////循环

          int j=0;/////////////标记的非零的元素,就相当于报数

          int m=0;/////////////标记是零的元素,跳过报数

          int x=0;/////////////先存输入的n值

          scanf("%d",&n);

          x=n;

          while(n--)////////////其实只要是赋非零的数的就好

            {

               arr1[i]=i+1;

                i++;

            }


          for(i=0;i<x;i++)

           {

                if(arr1[i]!=0)///////////开始报数

                  {

                      j++;

                  }

                if(j%3==0&&arr1[i]!=0)////////////报数报到3的时候标记这个元素,给他赋零,并且不能重复赋零

                  {

                     arr1[i]=0;

                     m++;

                   }

                if(i==x-1&&m<x-1)/////////////////第一轮报完的时候,非零的元素不是1个,或者是零的元素不是n-1个,就是没赋完

                   {

                     i=-1;///////////后面要i++,才是0,下次循环

                   }

           }


         for(i=0;i<x;i++)

            {

              if(arr1[i]!=0)

                {

                printf("%d ",arr1[i]);//////////////////打印这个非零的元素,就是报数完没报到3的

                 }

            }

}


 

0.0分

0 人评分

  评论区

  • «
  • »