可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合 scanf 函数逐个对数组元素赋值。

一维数组的应用及应用案例

案例描述】

求解问题:100人围坐一圈并按顺时针方向依次编号为0,1,...,99。并沿顺时针方向依次报数1,2,3,...k。报数为k的人退出。剩下的人继续从1开始报数。最后留下的是几号?k从键盘输入。

输入:3

输出:90

案例分析】

求解问题的基本思路是:

1、用数组作删除标记:int a[100]={0};

2、未作删除标记的编号循环报号,报到k的编号i作删除标记:a[i]=1;

3、每作一个删除标记,人数减1。直到余下最后一人。

【参考代码】

main()

{ int i=0,h=0,n=100,k,a[100]={0};

  scanf("%d",&k);

  while(n>1) //人数n>1时,继续报号

  {  if(a[i]==0) //编号i未作删除标记

      {  h++; //报号

         if(h==k){h=0;a[i]=1;n--;} //报到k号,作删除标记

      }

     i=(i+1)%100; //下一个编号

  }

  for(i=0;i<100;i++) //找出未作删除标记的编号

  if(a[i]==0){printf("%d",i);break;}

}

一维数组的应用及应用案例

/*方法二思路:退出1个人后从其后的人开始重新编号0,1,...

则编号x的上一个编号为(x+k)%n(n为当前编号时的总人数+1)。

问题转化为:最后余下的编号0的起始编号是多少?

参考代码:

main()

{ int i,k,s=0;

  scanf("%d",&k);

  for(i=1;i<100;i++)

       s=(s+k)%(i+1);

  printf("%d",s);

}*/