鬼之魂吧 关注:31贴子:2,191
  • 5回复贴,共1

【11.23】c语言问题

只看楼主收藏回复



(1)回溯.doc
大小:46.50KB下载:0次转存:0次
文件已失效
1楼2013-11-23 14:05回复

    <?xml:namespace prefix="o" ns="urn:schemas-microsoft-com:office:office"> </?xml:namespace>

    1.2 出栈序列统计
    【问题描述】
    栈是常用的一种数据结构,有n个元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。你已经知道栈的操作有两种:pushpop,前者是将一个元素进栈,后者是将栈顶元素弹出。现在要使用这两种操作,由一个操作序列可以得到一系列的输出序列。请你编程求出对于给定的n,计算并输出由操作数序列12,…,n,经过一系列操作可能得到的输出序列总数。
    【输入】
    一个整数n(1<=n<=15)
    【输出】
    一个整数,即可能输出序列的总数目。
    【样例】
    stack1.in
    3
    stack1.out
    5


    本楼含有高级字体3楼2013-11-23 14:06
    回复
      2025-05-20 22:45:54
      广告

      1.3 24
      【问题描述】
      几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲。在中国我们把这种游戏称为“算24点”。您作为游戏者将得到419之间的自然数作为操作数,而您的任务是对这4个操作数进行适当的算术运算,要求运算结果等于24
      您可以使用的运算只有:+-*/,您还可以使用()来改变运算顺序。注意:所有的中间结果必须是整数,所以一些除法运算是不允许的(例如,(2*2)4是合法的,2*(24)是不合法的)。下面我们给出一个游戏的具体例子:
      若给出的4个操作数是:1237,则一种可能的解答是1+2+3*7=24
      【输入】
      只有一行,四个19之间的自然数。
      【输出】
      如果有解的话,只要输出一个解,输出的是三行数据,分别表示运算的步骤。其中第一行是输入的两个数和一个运算符和运算后的结果,第二行是第一行的结果和一个输入的数据、运算符、运算后的结果;第三行是第二行的结果和输入的一个数、运算符和“=<?xml:namespace prefix="st1" ns="urn:schemas-microsoft-com:office:smarttags">24。如果两个操作数有大小的话则先输出大的。</?xml:namespace>
      如果没有解则输出“No answer!
      【样例】
      point24.in
      1 2 3 7
      point24.out
      2+1=3
      7*3=21
      21+3=24


      本楼含有高级字体4楼2013-11-23 14:07
      回复
        #include<cstdio>
        #include<cstdlib>
        using namespace std;
        int m,n;//m为行数 n为列数
        int a[20][20];
        int x1,y1,x2,y2;
        void f(int x1,int y1);
        int main()
        {
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
        scanf("%d%d",&m,&n);
        for(int i=1;i<=m;i++)
        {
        for(int j=1;j<=n;j++)
        {
        scanf("%d",&a[i][j]);//迷宫的样子
        }
        }
        scanf("%d%d",&x1,&y1);
        scanf("%d%d",&x2,&y2);
        f(x1,x2);
        fclose(stdin);
        fclose(stdout);
        system("pause");
        return 0;
        }
        void f(int x1,int y1)
        {
        int x,y;
        if(x==x2&&y==y2) printf("(%d,%d)\n",x2,y2);
        for(x=x1;x<=m;x++)
        {
        for(y=y1;y<=n;y++)
        {
        if(a[x][y-1]==1)
        {
        a[x][y-1]=0;
        f(x,y-1);//printf("(%d,%d) ",x,y);
        }//如果往左走可以 那么就往左走
        else
        {
        if(a[x][y-1]==0&&a[x+1][y]==1)
        {
        a[x+1][y]=0;
        f(x+1,y);//printf("(%d,%d) ",x,y);
        }//如果往左走不可以但可以往上走 那么就往上走
        if(a[x][y-1]==0&&a[x+1][y]==0&&a[x][y+1]==1)
        {
        a[x][y+1]=0;
        f(x,y+1);//printf("(%d,%d) ",x,y);
        }//如果往左边、上边走不可以但往右边走可以 那么就往右走
        if(a[x][y-1]==0&&a[x+1][y]==0&&a[x][y+1]==0&&a[x-1][y]==1)
        {
        a[x-1][y]=0;
        f(x-1,y);//printf("(%d,%d) ",x,y);
        }
        }
        }
        }
        }


        5楼2013-11-23 15:49
        回复
          好吧、、整个人都是混乱的、、
          ﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉
          “我有一个秘密。”
          “是什么?”
          “总有一天,你会知道。”
          ✎﹍﹍₯㎕℡﹍﹍


          6楼2013-11-24 14:19
          回复
            还有楼上上的程序是错的、、改了半天没改出来、、
            ﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉
            “我有一个秘密。”
            “是什么?”
            “总有一天,你会知道。”
            ✎﹍﹍₯㎕℡﹍﹍


            7楼2013-11-24 14:20
            回复