c语言-2048用C语言编写问题!

问题描述

2048用C语言编写问题!

为2048的游戏写一个算法,输入一个元素只能为0,2或4的二维数组和一个操作,字符wsad代替上下左右,时间复杂度越小起好。(不用随机产生2和4)如,
输入:
0 0 2 2
2 0 0 0
0 0 0 0
4 4 2 2
a
输出:
4 0 0 0
2 0 0 0
0 0 0 0
8 4 0 0
下面这段代码如何更改才能实现?
#include
void main()
{

char turn ;
int s[4][4];
int a[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
int i,j;
int q=0;
int e=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{

    scanf("%d",s[i][j]);
}
}
scanf("%c",&turn);
switch(turn)
{

case 'w':
        {
            for(i=0;i<4;i++)
    {
    for(j=0;j<4;j++)
    {

        if(s[i][j]==s[i][j+1])
        {
        a[q][e]=s[i][j]+s[i][j+1];
        e++;
        j++;
        }
        else
        {
        a[i][j]=s[i][j];
        }

    }
    }
            break;
    }
        case 's':
            {
                for(i=0;i<4;i++)
    {
    for(j=0;j<4;j++)
    {

        if(s[i][j]==s[i][j+1])
        {
            e=3;
        a[q][e]=s[i][j]+s[i][j+1];
        e--;
            j++;
        }
        else
        {
        a[i][j]=s[i][j];
        }
    }
    }
                break;
    }
            case 'a':
            {
                for(j=0;j<4;i++)
    {
    for(i=0;i<4;j++)
    {

        if(s[i][j]==s[i+1][j])
        {
        a[q][e]=s[i][j]+s[i+1][j];
        q++;
        i++;
        }
        else
        {
        a[i][j]=s[i][j];
        }

    }
    }
                break;
            }

                case 'd':
                    {
                        for(j=0;j<4;j++)
    {
    for(i=0;i<4;i++)
    {

        if(s[i][j]==s[i+1][j])
        {
            q=3;
        a[q][e]=s[i][j]+s[i+1][j];
        q--;
        i++;
        }
        else
        {
        a[i][j]=s[i][j];
        }
        break;
    }
    }

break;
}
default:
printf("输入无效");
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{

    scanf("%d",a[i][j]);
}

}
}

解决方案

首先,你的输入数组语句都少了'&',在第14行和倒数第四行,还有就是你这个2048有很大的问题啊,操作都没有循环的,而且没有判断输掉的条件,没有判断可以移动的条件,为什么一开始要输入数组的?结束时也是要输入,是为什么要这么设计呢?我到时有个好的方案,要是不介意时间关系的话,我这个星期天把代码给你看。只要你留个邮箱给我?因为最近事情有点多,只有周末有点空写了。可以的话就回复我咯。

解决方案二:

表示强烈关注,持续围观中

解决方案三:

首先scanf输入应为scanf("%d ",&s[i][j]);
其次最后的scanf应改为printf函数,
再者输出时应每四个数应换行故:
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d",a[i][j]);
}
putchar('n');
}
}
我测试了一下可以通过。

解决方案四:

参考代码
https://github.com/707wk/Senior-middle-school/tree/master/2048

时间: 2024-11-03 00:57:06

c语言-2048用C语言编写问题!的相关文章

用c 语言或者c++程序语言编写DGIM算法(近似计算窗口中1-bit的个数的算法)。

问题描述 用c 语言或者c++程序语言编写DGIM算法(近似计算窗口中1-bit的个数的算法). 1:以01stream.txt文件,好像不能上传附件,文件内容为01所组成的数据流,为自己所写程序的输入,读取中文件中的01数据流: 2:设定窗口大小1000,以不超过50%的相对误差回答任意时刻,当前窗口中有多少个1-bit: 3:设定窗口大小2000,以不超过10%的相对误差回答任意时刻,当前窗口中有多少个1-bit: 4:编写一个精确计算当前窗口中1-bit个数的精确程序,比较精确程序在运行时

api c-怎样用c语言调用wiondowsAPI函数,编写一个文本框,双击可以打开一个图片文件

问题描述 怎样用c语言调用wiondowsAPI函数,编写一个文本框,双击可以打开一个图片文件 怎样用c语言调用wiondowsAPI函数,编写一个文本框,双击可以打开一个图片文件

着急-这些sql语言对应的C#语言怎么编写?

问题描述 这些sql语言对应的C#语言怎么编写? //-------------------------------//考卷内容表drop table examcontent;create table ExamContent( Pid number(40) not null Tid number(40) null Type number(40) null Source number(10) null Answer varchar2(4000) null FullMark number(31) n

求助.我拿到一个用VB.net 语言 Vs2005 和Access工具 编写的程序 可我不会运行 急求高手指点

问题描述 求助.我拿到一个用VB.net语言Vs2005和Access工具编写的程序可我不会运行急求高手指点请对这方面的有研究的高手联系QQ873498013我把程序发给你,只要告诉我如何配置运行的即可.Q币相赠大伙帮帮忙啊真得很急! 解决方案 解决方案二:安装.netFrameWork2.0解决方案三:安装2005就可以调试了解决方案四:我已经加你了

c语言-怎么用C语言实现一个通信协议的编写

问题描述 怎么用C语言实现一个通信协议的编写 各位高手,手头有一个通信的协议说明,需要转换引脚的高低电平来实现数据的通信, 但是一直没有一个好的思路,如何组织起整个通信的框架,在接收到相应数据,然后 解析完成后根据解析的数据做相应的动作处理,有没有什么资料需要了解的,望指教. 解决方案 帮顶吧!这个没研究过 解决方案二: http://www.go-gddq.com/html/QiTa-ZongHe_tx/2013-01/992622.htm

2048的c语言代码。。。。

问题描述 2048的c语言代码.... 数据结构课程设计,哪位大神可以给个2048的游戏代码,谢谢啦... 解决方案 源码http://my.oschina.net/chenreason/blog/216003 解决方案二: #include<stdio.h> #include <stdlib.h> int a[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; int flag=0; void right(); void left()

socket多人聊天程序C语言版(一)_C 语言

首先,不要一步登天直接解决多人聊天这个问题,先把问题化简. 1.多人聊天的核心问题是服务器如何标识不同的客户端,如何根据客户端的需求转发消息给指定客户端. 2.多人聊天转化为C-C聊天,但是不再是直接C-C,而是通过server转发消息,所以变成==>C-S-C. 3.server如何允许2个client同时连接,设置listen函数的第二个参数,最大连接数. 4.server如何标识两个client,用一个结构体数组来存放两个client的信息. 5.server如何转发消息给client,很

socket多人聊天程序C语言版(二)_C 语言

socket多人聊天程序C语言版(一)地址: http://www.jb51.net/article/94938.htm 1V1实现了,1V多也就容易了.不过相对于1V1的程序,我经过大改,采用链表来动态管理.这样效率真的提升不少,至少CPU使用率稳稳的在20以下,不会飙到100了.用C语言写这个还是挺费时间的,因为什么功能函数都要自己写,不像C++有STL库可以用,MFC写就更简单了,接下来我还会更新MFC版本的多人聊天程序.好了,废话少说,进入主题. 这个程序要解决的问题如下: 1.CPU使

Swift语言指南(九) Swift语言的基本运算符

运算符(operator)是用来检查,改变或合并值的一种特殊符号或短语.例如,加号运算符让两个数字相加(如:let i = 1 + 2),还有些更复杂的运算符,如逻辑与运算符(&&)(如:if enteredDoorCode && passedRetinaScan)和自增运算符(++i)(将 i 的值加 1 的便捷写法). Swift 支持标准C语言的大多数运算符,并且改进了一些特性以规避常见的代码错误.赋值运算符(=)是没有返回值的,这样是为了避免在使用等于运算符(==)