| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1827 人关注过本帖
标题:[原创]扑克牌问题
只看楼主 加入收藏
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
 问题点数:0 回复次数:9 
[原创]扑克牌问题

很无聊,出个题吧,大家想想。

我同学给了我5张扑克牌,点数是连续的——如3,4,5,6,7 我可以从里面抽出连续的两张放到剩下3张牌的左边或右边—— 如抽出4,5放到左边得4,5,3,6,7。 我一共有3次机会抽牌,重复3次后必须把扑克牌倒序排列 如3,4,5,6,7为7,6,5,4,3 编程找出解法。 推广——给出任意牌数,抽牌次数和一次抽连续拍的张数,编程找出解法。

当然你用自己先玩玩也可以,)

搜索更多相关主题的帖子: 扑克牌 
2004-08-16 12:19
flylee
Rank: 5Rank: 5
等 级:职业侠客
帖 子:309
专家分:374
注 册:2004-8-10
收藏
得分:0 
给出的点数可不可以是降序排列
如7,6,5,4,3为3,4,5,6,7
2004-08-17 11:02
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
一样啊

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-08-17 12:38
xiaoxuer123
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2004-9-3
收藏
得分:0 
你的答案呢??

2004-09-03 15:14
zhongguisong
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-9-6
收藏
得分:0 

请你把那个“连续的两张牌”的意思说清楚点

比如说有5个位置 0 1 2 3 4 5

它的变换只有

(1)1 0 3 4 2

(2) 2 0 3 4 1

(3)2 1 0 3 4

(4)0 3 4 2 1

(5)2 0 1 4 3

(6) 3 0 1 4 2

(7)3 2 0 1 4

(8)0 1 4 3 2

不只是否包含1 2 0 3 4

也就是说反连续算不算 比如说先拿位置2 再拿位置1

2004-09-06 22:54
weixiaohe
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2004-8-6
收藏
得分:0 
最后怎么连.如 3  和 7怎么放到最后边,
2004-09-07 04:31
zhongguisong
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-9-6
收藏
得分:0 

只是编程有点难

玩的话很容易

应该有很多解法

(1)5 4 3 6 7

(2)6 5 3 7 4

(3)7 6 5 4 3 

2004-09-08 11:21
zhongguisong
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-9-6
收藏
得分:0 

上面有点错误

应该考虑连续

2004-09-08 11:28
zhongguisong
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-9-6
收藏
得分:0 

#include<stdio.h> int fangxu(int a[5]) { int n=0,i,j; for(i=0;i<5;i++) for(j=i+1;j<5;j++) if(a[i]>a[j])n++; return n; } void print(int a[5]) { int i; for(i=0;i<5;i++) printf("%d ",a[i]); printf("\n\n"); } int * ok(int i,int a[5]) { int b,c; if(i==1) { b=a[0];a[0]=a[2];a[2]=b; } if(i==2) { b=a[1];a[1]=a[3];a[3]=b; c=a[2];a[2]=a[4];a[4]=c; } if(i==3) { b=a[0];a[0]=a[1];a[1]=b; c=a[2];a[2]=a[3];a[3]=a[4]; a[4]=c; } if(i==4) { b=a[0];a[0]=a[2];a[2]=a[3]; a[3]=a[4];a[4]=a[1];a[1]=b; } if(i==5) { b=a[0];a[0]=a[3]; a[3]=a[1];a[1]=a[2];a[2]=b; } if(i==6) { b=a[2];a[2]=a[4];a[4]=a[3]; a[3]=b; } if(i==7) { b=a[0];a[0]=a[2];a[2]=a[1]; a[1]=b; c=a[3];a[3]=a[4];a[4]=c; } if(i==8) { b=a[0];a[0]=a[3];a[3]=a[4]; a[4]=a[2];a[2]=a[1];a[1]=b; } return a; } int * huanyuan(int i,int a[5]) { int b,c; if(i==1) { b=a[0];a[0]=a[2];a[2]=b; } if(i==2) { b=a[1];a[1]=a[3];a[3]=b; c=a[2];a[2]=a[4];a[4]=c; } if(i==3) { b=a[0];a[0]=a[1];a[1]=b; c=a[2];a[2]=a[4];a[4]=a[3]; a[3]=c; } if(i==4) { b=a[0];a[0]=a[1];a[1]=a[4]; a[4]=a[3];a[3]=a[2];a[2]=b; } if(i==5) { b=a[0];a[0]=a[2]; a[2]=a[1];a[1]=a[3];a[3]=b; } if(i==6) { b=a[2];a[2]=a[3];a[3]=a[4];a[4]=b; } if(i==7) { b=a[0];a[0]=a[1];a[1]=a[2];a[2]=b; c=a[3];a[3]=a[4];a[4]=c; } if(i==8) { b=a[0];a[0]=a[1];a[1]=a[2]; a[2]=a[4];a[4]=a[3];a[3]=b; } return a; }

main() { int i,j,k,n,b[5],c[5]; int a[5]={3,4,5,6,7}; for(i=1;i<9;i++) for(j=1;j<9;j++) for(k=1;k<9;k++) { ok(k,a); if(fangxu(a)==3) { for(n=0;n<5;n++)b[n]=a[n]; ok(j,b); if(fangxu(b)==6) { for(n=0;n<5;n++)c[n]=b[n]; ok(i,c); if(fangxu(c)==10) { printf("1-->");print(a); printf("2-->");print(b); printf("3-->");print(c); printf("\n\n\n"); huanyuan(k,a); } else huanyuan(j,c); } else huanyuan(i,b); }

else huanyuan(k,a); } }大家可以一起看一看

我发了三天终于有点收获了

2004-09-08 11:30
ffll518
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2004-9-8
收藏
得分:0 
好 好长啊,是不是可以考虑一下用回溯呢?这样代码可以简洁一点。

2004-09-08 15:48
快速回复:[原创]扑克牌问题
数据加载中...
 
   



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

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