鱼C论坛

 找回密码
 立即注册
查看: 7891|回复: 8

[技术交流] 魔术师发牌问题

[复制链接]
发表于 2012-12-26 01:43:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:编程求出扑克牌的排放顺序符合以下要求。

问题描述:

魔术师利用一副牌中的13张黑牌,预先将他们排好后叠放在一起,牌面朝下。对观众说:“我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?现场演示。”魔术师将最上面的那张牌数为1,把他翻过来正好是黑桃A,将黑桃A放在桌子上,第二次数1,2,将第一张牌放在这些牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上这样依次进行将13张牌全部翻出,准确无误。


视频讲解:http://blog.fishc.com/1982.html


源代码参考:http://bbs.fishc.com/thread-25387-1-1.html

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-31 22:41:01 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-27 21:19:47 | 显示全部楼层
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,"魔术师翻牌"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-15 20:15:23 | 显示全部楼层
我来看看有十个字符吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-15 20:21:10 | 显示全部楼层
#include<iostream>
using namespace std;

int a[14],visit[14];

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[i])
                        cnt++;
                if(cnt==k)
                {
                        a[i]=k;
                        visit[i]=1;
                        k++;
                        cnt=0;
                }
        }
        for(int i=1;i<=13;i++)
                cout<<a[i]<<" ";
        cout<<endl;
        return 0;
}
结果:1 8 2 5 10 3 12 11 9 4 7 6 13
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-24 13:04:06 | 显示全部楼层

强烈支持楼主ing……:(感恩无私的分享与奉献 :)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-27 22:29:36 | 显示全部楼层
真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-11 09:38:53 | 显示全部楼层
魔术师发牌用循环链表执行:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define NUM 13
  4. struct Date
  5. {
  6.     int number;
  7.     int flag;
  8.     struct Date *next;
  9. };

  10. void ListInsert(struct Date **pt,int num,int fl)
  11. {
  12.     struct Date *tmp=NULL,*middle=NULL;
  13.     tmp=(struct Date *)malloc(sizeof(struct Date));
  14.     if(tmp==NULL)   exit(1);
  15.     tmp->number = num;
  16.     tmp->flag = fl;
  17.     if((*pt)!=NULL)
  18.     {       
  19.         middle = *pt;
  20.         *pt = tmp;
  21.         tmp->next = middle;
  22.     }
  23.     else
  24.     {
  25.         tmp->next=NULL;
  26.         (*pt)=tmp;
  27.     }
  28. //    printf("插入成功!\n");
  29. }
  30. void ClearList(struct Date **pt)
  31. {
  32.     struct Date *kill=NULL;
  33.     for(int i=0; i<NUM-1;++i)
  34.     {
  35.         kill=(*pt);
  36.         (*pt)=(*pt)->next;
  37.         free(kill);       
  38.     }
  39.     free(*pt);
  40.     printf("Clear OK!\n");

  41. }

  42. void ListPrint(struct Date *pt)
  43. {
  44.     if(pt->flag==0){
  45.       while(pt!=NULL)
  46.       {
  47.           printf("%d--%d\n",pt->number,pt->flag);
  48.           pt = pt->next;
  49.       }
  50.     }
  51.     else{
  52.         for(int i=1;i<=NUM;++i)
  53.         {
  54.             printf("No.%d is %d\n",i,pt->number);
  55.             pt=pt->next;
  56.         }
  57.     }
  58.     putchar('\n');
  59. }
  60. void ListCircle(struct Date **pt)
  61. {
  62.     struct Date *rear=*pt;
  63.     while(rear->next!=NULL)
  64.         rear=rear->next;
  65.     rear->next=*pt;
  66. }

  67. void Magician(struct Date **pt)
  68. {
  69.     for(int i=1;i<=NUM;++i)
  70.     {
  71.         if(i==1)
  72.         {
  73.             (*pt)->number=1;
  74.             (*pt)->flag=1;
  75.             (*pt)=(*pt)->next;
  76.         }
  77.         else
  78.         {
  79.             for(int j=i-1;j>0;--j)
  80.             {
  81.                 do{
  82.                     (*pt)=(*pt)->next;
  83.                 }while((*pt)->flag==1);
  84.             }
  85.             (*pt)->number=i;
  86.             (*pt)->flag=1;
  87.             do{
  88.                 (*pt)=(*pt)->next;
  89.             }while(((*pt)->flag==1)&&(i!=NUM));
  90.         }
  91.     }
  92. }

  93. int main()
  94. {
  95.     struct Date *pt=NULL;
  96.     for(int i=NUM ;i>0;i--)
  97.         ListInsert(&pt,0,0);
  98.     ListPrint(pt);
  99.     ListCircle(&pt);
  100.     pt->flag=1;
  101.     Magician(&pt);
  102.     ListPrint(pt);
  103.     ClearList(&pt);
  104.     return 0;

  105. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-15 16:18:49 | 显示全部楼层
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);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 18:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表