数据结构(C语言版)课程设计大作业,急!!!

编写程序:题目:纸牌游戏编号为1~52的牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次... 编写程序:
题目:纸牌游戏
编号为1~52的牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;依次类推,知道左右以52为基数的牌犯过一次。输出:这是正面向上的牌有哪些?

要求:1.实验目的概述(总体设计方案) 2.解题思路的描述(数据结构和算法的设计) 3.源程序清单(源程序中应该附有必要的注释)4.程序调试及测试结果 5.结论
主要包括:
(1)在解决和设计本文题目所涉及到的问题时,你所采取的方法、手段和关键性的技术。
(2)在调试程序的过程中你所遇到的问题及解决方法。
(3)关于程序的特色和改进设想。
(4)其他需要说明的情况。
6.参考文献

其中:源程序以及其中各个模块的功能及作用分析最重要!!!

请各位高手指点,对我很重要,谢谢!采纳为答案的话分数翻翻!!!
需要一个完整的程序及注释,同时调试运行一定要正确哈,谢谢!
展开
 我来答
dwthead
2010-05-20 · TA获得超过2308个赞
知道小有建树答主
回答量:1478
采纳率:0%
帮助的人:1907万
展开全部
以数组模拟卡片 TRUE向上 FALSE向下
循环模拟翻卡片 满足条件 card[i]=!card[i];
最后输出值为TRUE的数组元素
#include <stdio.h>
#include <string.h>
int main()
{
bool card[52];
memset(card,true,52);
for (int i=2,n=1;i<=52;i++,n++)
{
for(int j=n;j<52;j++)
{
if((j+1)%i==0) card[j]=!card[j];
}
}
for(int i=0;i<52;i++)
if(card[i]) printf("%d ",i+1);
return 0;
}
改进 根据题意的翻牌规则 即求约数的过程 一个数的约数如果去掉1 包含自身的个数为奇数 即被翻了奇数次 向下,反之则向上。
#include <stdio.h>
int main()
{
printf("1 ");
for(int i=4;i<=52;i++)
{
int count=0;
for(int j=2;j<=i/2;j++)
{
if(i%j==0) count++;
}
if(count%2!=0) printf("%d ",i);
}
return 0;
}
可见 在循环上节省了循环次数 而且去掉了申请CARD的空间 只需要一个count变量即可
BJ华夏艺匠
2024-08-11 广告
北京华夏艺匠模型科技有限公司致力于高精度模型设计与制作,在数据采集模拟实验模型中,我们运用先进的三维扫描与逆向工程技术,精准捕捉实物数据,通过高保真建模软件构建数字模型。这些模型不仅还原度高,还能模拟复杂环境下的数据变化,为科研、教育及工业... 点击进入详情页
本回答由BJ华夏艺匠提供
匿名用户
2010-05-20
展开全部
int a[52]={0};//声明数组初始值,全为0,代表正面朝上
for(int i=2;i<53;i++)
for(int j=i;j<53;j++)
{
if(j%i==0)
{
if(a[j-1]==0)
a[j-1]=1; //1用来代表正面朝下
else
a[j-1]=0;
}
}

for(int k=0;k<52;k++)
{
if(a[k]==0)
printf("第%d张牌是正面向上的",k+1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晏永衡翠柏
2019-06-04 · TA获得超过3681个赞
知道大有可为答主
回答量:3144
采纳率:33%
帮助的人:173万
展开全部
以数组模拟卡片
TRUE向上
FALSE向下
循环模拟翻卡片
满足条件
card[i]=!card[i];
最后输出值为TRUE的数组元素
#include
<stdio.h>
#include
<string.h>
int
main()
{
bool
card[52];
memset(card,true,52);
for
(int
i=2,n=1;i<=52;i++,n++)
{
for(int
j=n;j<52;j++)
{
if((j+1)%i==0)
card[j]=!card[j];
}
}
for(int
i=0;i<52;i++)
if(card[i])
printf("%d
",i+1);
return
0;
}
改进
根据题意的翻牌规则
即求约数的过程
一个数的约数如果去掉1
包含自身的个数为奇数
即被翻了奇数次
向下,反之则向上。
#include
<stdio.h>
int
main()
{
printf("1
");
for(int
i=4;i<=52;i++)
{
int
count=0;
for(int
j=2;j<=i/2;j++)
{
if(i%j==0)
count++;
}
if(count%2!=0)
printf("%d
",i);
}
return
0;
}
可见
在循环上节省了循环次数
而且去掉了申请CARD的空间
只需要一个count变量即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式