| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 907 人关注过本帖
标题:数字翻牌算法---求助+讨论
只看楼主 加入收藏
dill131
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-9-8
收藏
 问题点数:0 回复次数:5 
数字翻牌算法---求助+讨论

编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的,直到以52为基数的翻过,输出此时正面向上的牌。输入数据:纸牌编号; 如上规则所述,输出最后正面向上的纸牌编号。

用线性表的存储来实现一个C++算法,谁有比较简单的算法,互相交流一下

以下是个例子,好象不对
#include<iostream>

using namespace std;

int main(int agc,char* agm[])
{
bool card[6];
int card_index = 0;
for(;card_index < 6;card_index++)
card[card_index] = true;
for(card_index = 2;card_index < 6;card_index++)
{
for(int times = 2;card_index*times < 6;times++)
{
card[card_index*times]= (card[card_index*times]==true)? false:true;
}
}
for(card_index = 1;card_index < 6;card_index++)
if(card[card_index] == true)
cout<<card_index<<endl;
return 1;
}

搜索更多相关主题的帖子: 翻牌 算法 数字 
2006-09-08 08:32
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
用数组模拟的话会很简单的

汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-09-08 08:41
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
以下是引用dill131在2006-9-8 8:32:32的发言:

编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的,直到以52为基数的翻过,输出此时正面向上的牌。输入数据:纸牌编号; 如上规则所述,输出最后正面向上的纸牌编号。

用线性表的存储来实现一个C++算法,谁有比较简单的算法,互相交流一下

以下是个例子,好象不对
#include<iostream>

using namespace std;

int main(int agc,char* agm[])
{
bool card[6];
int card_index = 0;
for(;card_index < 6;card_index++)
card[card_index] = true;
for(card_index = 2;card_index < 6;card_index++)
{
for(int times = 1;card_index*times < 6;times++)
{
card[card_index*times]= (card[card_index*times]==true)? false:true;
}
}
for(card_index = 1;card_index < 6;card_index++)
if(card[card_index] == true)
cout<<card_index<<endl;
return 1;
}


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-09-08 08:45
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
#include<iostream>
using namespace std;
int main(int agc,char* agm[])
{
int vec[53]={0};
int ix,in;
for(ix=2;ix<53;ix++)
{
for(in=ix;in<53;in+=ix)
vec[in]++;
}
for(ix=1;ix<53;ix++)
if(!(vec[ix]%2)) cout<<ix<<" ";
cout<<endl;
}

随便写写..好象还是蛮麻烦...

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-09-08 14:16
dill131
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-9-8
收藏
得分:0 

用数组做出来一个,不太难,难的是怎么用线性表做,还没想出来线性表的算法
实际上就是算约数的个数,或者取模也可以

2006-09-11 12:34
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
typedef struct Linklist
{
int NUM; //存储牌号
int force;//用来判断正反
struct Linklist *next;
}Linklist //链表结构
然后建立链表,初始所有的 force都等于1(正面),每被翻一次,force就乘以 -1.最后输出force=1的牌. force=-1的牌是反的.这比上面给的用vec[in]++的方法简单点.然后就是指针移动的问题了,以4为例
p=head;
for(i=1;i<53;i++)
{
p=p->next;
if(i%4==0) p->force * = -1;
}
用个for()循环按上面方法搞定2-52,然后输出force=1的牌就可以了

我的征途是星辰大海
2006-09-18 13:56
快速回复:数字翻牌算法---求助+讨论
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017363 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved