魔术师发牌问题
题目:编程求出扑克牌的排放顺序符合以下要求。问题描述:
魔术师利用一副牌中的13张黑牌,预先将他们排好后叠放在一起,牌面朝下。对观众说:“我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?现场演示。”魔术师将最上面的那张牌数为1,把他翻过来正好是黑桃A,将黑桃A放在桌子上,第二次数1,2,将第一张牌放在这些牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上这样依次进行将13张牌全部翻出,准确无误。
视频讲解:http://blog.fishc.com/1982.html
源代码参考:http://bbs.fishc.com/thread-25387-1-1.html
强烈支持楼主ing…… Dim a(13),b(13)
For i = 1 To 13
b(i) = 1
Next
i=1
m = 1
n = 1
k = 14
While (k>1)
If b(i) = 1 Then
If n = m Then
a(i) = m
b(i) = 0
m = m + 1
k = k - 1
n = 1
Else
n = n + 1
End If
End If
i = i + 1
If i = 14 Then
i=1
End If
Wend
For i = 1 To 13
p = p & " " & a(i)
Next
MsgBox p,vbonly,"魔术师翻牌" 我来看看有十个字符吗 #include<iostream>
using namespace std;
int a,visit;
int main()
{
memset(visit,0,sizeof(visit));
int k=1,cnt=0;
for(int i=1;i<=14&&k<14;i++)
{
if(i==14)
i=1;
if(!visit)
cnt++;
if(cnt==k)
{
a=k;
visit=1;
k++;
cnt=0;
}
}
for(int i=1;i<=13;i++)
cout<<a<<" ";
cout<<endl;
return 0;
}
结果:1 8 2 5 10 3 12 11 9 4 7 6 13
强烈支持楼主ing……:(感恩无私的分享与奉献 :) 真是难得给力的帖子啊。 魔术师发牌用循环链表执行:
#include<stdio.h>
#include<stdlib.h>
#define NUM 13
struct Date
{
int number;
int flag;
struct Date *next;
};
void ListInsert(struct Date **pt,int num,int fl)
{
struct Date *tmp=NULL,*middle=NULL;
tmp=(struct Date *)malloc(sizeof(struct Date));
if(tmp==NULL) exit(1);
tmp->number = num;
tmp->flag = fl;
if((*pt)!=NULL)
{
middle = *pt;
*pt = tmp;
tmp->next = middle;
}
else
{
tmp->next=NULL;
(*pt)=tmp;
}
// printf("插入成功!\n");
}
void ClearList(struct Date **pt)
{
struct Date *kill=NULL;
for(int i=0; i<NUM-1;++i)
{
kill=(*pt);
(*pt)=(*pt)->next;
free(kill);
}
free(*pt);
printf("Clear OK!\n");
}
void ListPrint(struct Date *pt)
{
if(pt->flag==0){
while(pt!=NULL)
{
printf("%d--%d\n",pt->number,pt->flag);
pt = pt->next;
}
}
else{
for(int i=1;i<=NUM;++i)
{
printf("No.%d is %d\n",i,pt->number);
pt=pt->next;
}
}
putchar('\n');
}
void ListCircle(struct Date **pt)
{
struct Date *rear=*pt;
while(rear->next!=NULL)
rear=rear->next;
rear->next=*pt;
}
void Magician(struct Date **pt)
{
for(int i=1;i<=NUM;++i)
{
if(i==1)
{
(*pt)->number=1;
(*pt)->flag=1;
(*pt)=(*pt)->next;
}
else
{
for(int j=i-1;j>0;--j)
{
do{
(*pt)=(*pt)->next;
}while((*pt)->flag==1);
}
(*pt)->number=i;
(*pt)->flag=1;
do{
(*pt)=(*pt)->next;
}while(((*pt)->flag==1)&&(i!=NUM));
}
}
}
int main()
{
struct Date *pt=NULL;
for(int i=NUM ;i>0;i--)
ListInsert(&pt,0,0);
ListPrint(pt);
ListCircle(&pt);
pt->flag=1;
Magician(&pt);
ListPrint(pt);
ClearList(&pt);
return 0;
}
void Magical(int n){
int i=0,j=0;
pNode CL_Head=0;pNode CL_Tail=0;
CreateCListTail(&CL_Head,&CL_Tail,n); //全部输入为0
pNode sp=CL_Head;
for(i=1;i<=n;i++){
while(j<i){
sp=sp->Next;j++;
if(sp->data!=0){
j--;
}
}
j=0;sp->data=i;
}
PrintfCList(CL_Head);
}
页:
[1]