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;
}
这个只有给你鼓励了