推箱子游戏

使用C来实现一个简单的推箱子游戏..

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main(){
    char a[50][50]={
    "   ###     ",
    "   #*#     ",
    "   # #     ",
    "####O######",
    "#*  OS O *#",
    "#####O#####",
    "    # #    ",
    "    #*#    ",
    "    ###    ",
    };

    int i,f=0; //控制变量 
    int x=4,y=5; //控制点坐标 

    char ch; //定义控制输入端

    //打印输出地图
    for(i=0;i<12;i++){
        puts(a[i]);
    }
    puts("游戏尚未开始,请按键……");

    //f标记值0.1.2.3共计4次循环 
    while(f<4)//开始循环
    {
        ch=getch();

        if(ch=='s') //按下s键
        { 
            if(a[x+1][y]!='#'&&a[x+1][y]!='@')//未碰墙未达目的地 
            {
                if(a[x+1][y]!='O') //前面没有O的时候 
                {
                    a[x][y]=' ';    //现坐标为空 
                    x++;            //x坐标向下移动一位 
                    a[x][y]='S';    //新坐标标记为S 
                }
                else    //前面有O标记时 
                {
                    if(a[x+2][y]!='#')  //前面两坐标有墙 
                    {
                        if(a[x+2][y]!='*')  //O前面没有目的地时 
                        {
                            a[x][y]=' ';    //现坐标为空     
                            x++;            //x坐标向下移动 
                            a[x][y]='S';    //新坐标标记为S 
                            a[x+1][y]='O';  //前面一个坐标为O 
                        }
                        else    //O前面有目的地坐标时 
                        {
                            a[x][y]=' ';    //现坐标为空 
                            x++;            //x坐标向下移动 
                            a[x][y]='S';    //新坐标标记为S 
                            a[x+1][y]='@';  //目的地坐标改为@ 
                            f=f+1;          //f标记值增加1 
                        }
                    }
                }
            }
        }

        if(ch=='w') //按下w键
        { 
            if(a[x-1][y]!='#'&&a[x-1][y]!='@')
            {
                if(a[x-1][y]!='O') 
                {
                    a[x][y]=' ';
                    x--;
                    a[x][y]='S';
                }
                else
                {
                    if(a[x-2][y]!='#')
                    {
                        if(a[x-2][y]!='*')
                        {
                            a[x][y]=' ';                            
                            x--;
                            a[x][y]='S';
                            a[x-1][y]='O';
                        }
                        else
                        {
                            a[x][y]=' ';
                            x--;
                            a[x][y]='S';
                            a[x-1][y]='@';
                            f=f+1;
                        }
                    }
                }
            }
        }

        if(ch=='d') //按下d键
        { 
            if(a[x][y+1]!='#'&&a[x][y+1]!='@')
            {
                if(a[x][y+1]!='O') 
                {
                    a[x][y]=' ';
                    y++;
                    a[x][y]='S';
                }
                else
                {
                    if(a[x][y+2]!='#')
                    {
                        if(a[x][y+2]!='*')
                        {
                            a[x][y]=' ';                            
                            y++;
                            a[x][y]='S';
                            a[x][y+1]='O';
                        }
                        else
                        {
                            a[x][y]=' ';
                            y++;
                            a[x][y]='S';
                            a[x][y+1]='@';
                            f=f+1;
                        }
                    }
                }
            }
        }

        if(ch=='a') //按下a键
        { 
            if(a[x][y-1]!='#'&&a[x][y-1]!='@')
            {
                if(a[x][y-1]!='O') 
                {
                    a[x][y]=' ';
                    y--;
                    a[x][y]='S';
                }
                else
                {
                    if(a[x][y-2]!='#')
                    {
                        if(a[x][y-2]!='*')
                        {
                            a[x][y]=' ';                            
                            y--;
                            a[x][y]='S';
                            a[x][y-1]='O';
                        }
                        else
                        {
                            a[x][y]=' ';
                            y--;
                            a[x][y]='S';
                            a[x][y-1]='@';
                            f=f+1;
                        }
                    }
                }
            }
        }

    system("cls"); //清屏
    for(i=0;i<12;i++)
        {
        //输出变量变更之后的地图 
        puts(a[i]);
        }
    printf("\n已达成:%d 颗星。",f);
    }


    Sleep(500);  
    system("cls"); //清屏
    puts("恭喜,你赢了!");
    return 0;
} 

完数

一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。
现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数。
提示:可以写一个函数来判断某个数是否是完数。


输入格式:

两个正整数,以空格分隔。

输出格式:

其间所有的完数,以空格分隔,最后一个数字后面没有空格。如果没有,则输出一个空行。


输入样例:1 10
输出样例:6


#include<stdio.h>
#include<stdlib.h>

int main(){
    //输入整数变量 
    int n,m;
    do{
        scanf("%d",&n); 
        scanf("%d",&m);     
    }while(0>n&&n>=m&&m>999);
    //命名参数 
    int x,i;
    int sum;
    int count = 0;

    for(x=n;x<=m;x++){  
        sum =0;
        //判断是否是完数 
        for(i=1;i<x;i++){
            if(x%i == 0){
                sum += i;
                }
            }
            //是完数的话,计数器+1并输出 
            if(sum == x){
                count ++;
                if(count>1){
                    printf(" %d",x);
                }else{
                    printf("%d",x);
                }           
            }else{
                printf("");
            }
    }
    system("pause");
    return 0;
} 

分解质因数

每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。

现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。

输入格式:一个整数,范围在[2,100000]内。
输出格式:形如:n=axbxcxd或n=n。所有的符号之间都没有空格,x是小写字母x。
输入样例:18
输出样例:18=2x3x3

#include<stdio.h>
#include<stdlib.h>
int main(void){
    int n,i; 
    scanf("%d",&n);
    printf("%d=",n);

    for(i=2; i<=n; i++){
        while(n!=i){
            if(n%i==0){
                printf("%dx",i);
                n=n/i;
            }else{
                break;
        }
        }
    }
    printf("%d\n",n);
    return 0;
}

用汉语拼音输出整数

你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
如输入1234,则输出: yi er san si
注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为: fu er san si yi

输入格式:一个整数,范围是[-100000,100000]。
输出格式:表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。
输入样例:-30
输出样例:fu san ling
时间限制:500ms内存限制:32000kb

#include <stdio.h>
int main(){
    int x,t;
    scanf("%d",&x);
    int mask = 1;
//判断输入数是否为负数,如果为负数,则输出负号,然后把负数转化为正整数。
    if(x<0){
        printf("fu ");
        x = -x;
    }
//判断输入的正整数有多少位,然后输出后面与x相余的对应位数
    t = x;  
    while( t > 9){
        t /= 10;
        mask *= 10;
    }
//不断的相于,然后输出到switch()
    do {
        int d = x / mask;
//      printf("%d",d);
        switch(d){
            case 0:
                printf("ling");
                break;
            case 1:
                printf("yi");
                break;
            case 2:
                printf("er");
                break;
            case 3:
                printf("san");
                break;
            case 4:
                printf("si");
            case 5:
                printf("wu");
                break;
            case 6:
                printf("liu");
                break;
            case 7:
                printf("qi");
                break;
            case 8:
                printf("ba");
                break;
            case 9:
                printf("jiu");
                break;
            }
        if( mask > 9){
            printf(" ");
            }
            x %= mask;
            mask /= 10 ;
        } while(mask >0);
    return 0;
}

素数求和

我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个正整数n、m。0<n<=m<=200
你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
输入格式:两个整数,第一个表示n,第二个表示m。
输出格式:一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
输入样例:2 4
输出样例:15

#include<stdio.h>
int main(){
    int n,m,i;
    int sum = 0;
    int count = 0;
//限定n和m的输入是在题目限定范围内 
    do{
        scanf("%d %d",&n,&m);
        }while(n<=0||m<n||m>200);

    for(i=2;;i++){
        int isPrime = 1;
//判断是否为素数           
        int k;      
        for (k=2;k<i-1;k++){
            if(i%k == 0){
                isPrime = 0;
                break;
            }
        }
//当i为素数时,进行计算       
        if(isPrime){
            count ++;
//序列大于m时退出循环
            if(count > m){
                break;
            }
//序列大于n时开始计算
            if(count >= n){
                sum += i;
            }
        }
    }       
    printf("%d",sum);
    return 0;
}

tips:题干中的n和m的取值范围是考察点之一,很容易忽略。