C++程序采用指针做

C 有一叠卡片,卡片号依次为1到n,并且所有卡片的正面朝上。从卡片号2开始,把凡是偶数的 卡片都翻成正面朝下。再从3号卡片开始,把凡是卡片号为3的倍数的卡片都翻一面(即把正面 朝上的翻成正面朝下,把正面朝下的翻成正面朝上)。下一步从4号卡片开始,把凡是卡片号 为4的倍数的卡片都翻转一次,依次类推。问:最后哪些卡片朝上。

用1表示正面朝上。0表示正面朝下。为了方便用数组1到n下标存放,下标0不用

代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)

#include<stdio.h>
int main ()
{
    int i,j,n=10;
    printf("输入n:");
    scanf("%d", &n);
    int a[n+1];
    for(i = 1; i <= n; i ++)
    {
        a[i] = 1;
    }
    for(i = 2; i <= n; i ++)
    {
        for(j = i; j <= n; j += i)
        {
            a[j] = !a[j];
        }
    }
    for(i = 1; i <= n; i ++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

必须用指针做,是吧?

int main()
{
    int a[1000] = {0};
    int *p = a;
    int n,i,j;
    printf("请输入卡片数量:");
    scanf("%d",&n);
    for(j=2;j<n;j++)
    {
      for(i=0;i<n;i++)
      {
        if((i+1)%j == 0)
        {
          if(*(p+i) == 0)
            *(p+i) = 1;
          else
            *(p+i) = 0;
        }
      }
    }
    printf("最终牌面朝上的卡片有:\n");
    for(i = 0; i < n; i ++)
    {
        if(*(p+i) == 0)
          printf("%d ",i+1);
    }
    return 0;
}

这个只有给你鼓励了