第13周 学习总结

题目:

这道题,主要是左边的小于右边的值都删去,然后特判一下逆序的就可以直接删去后面的数

#include <stdio.h>
#include <string.h>
void fun(char n[], int m) {
    int len = strlen(n);
    char b[110];
    int t = 0;
//这里把前一位小于后一位的都删除,如果最后还剩一些没删,就直接删除最后几位。
    //这里是
    for (int i = 0; i < len; i++) {           
        while (t > 0 && m > 0 && b[t - 1] < n[i]) 
        {
            t--;
            m--;
        }
        b[t++] = n[i];
    }
    int k = 0;
    while (k < t - m) {
        printf("%c", b[k]);
        k++;
    }
    printf("\n");
}

int main() {
    int T;
    scanf("%d", &T);
    char n[110];
    int m;
    for (int i = 0; i < T; i++) 
    {
        scanf("%s %d", n, &m);
        fun(n, m);
    }

    return 0;
}

 这个里面最难的是那个函数删去小值。

这里的t代表下标,如果前面的数小于后面的数,就把下标减一,这样就可有从新赋值,从而删去了小的数。

题目:

这种很大数据的,还有取余运算,因该是找规律。

代码:

#include<stdio.h>
int main()
{
    int n;
    long long now;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%lld",&now);
        if(now == 1)printf("9\n");
        else printf("5\n");
        
    }
    
    return 0;
}

emmmmmm

这周刷的题比较少,感觉学疲了,这周还是就做了个小小游戏。井字棋(这是第一版本),感觉就比较拉,并且这个还有很多bug的,后面有时间再优化下吧。

//头文件。
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3



void beginMenu(char board[ROW][COL]);

//void neumePrint();


void Menu(char begin, char board[ROW][COL]);

void Begingame(char moden,char board[ROW][COL]);


int Iswin(char board[ROW][COL]);

void operat(char board[][COL]);
#include "game.h"


//初始化数组
void beginMenu(char board[ROW][COL])
{
	for (int i = 0; i < ROW; i++)
		for (int j = 0; j < COL; j++)
			board[i][j] = ' ';


}


//打印菜单
void Menu(char begin, char board[ROW][COL])
{
	
		if (begin == '1') {

			printf("_____________\n");
			for (int i = 0; i < ROW; i++)
			{

				printf("|   |   |   |\n");

				for (int j = 0; j < COL; j++)
				{
					if (j == COL - 1)
						printf("|_%c_|", board[i][j]);
					else
						printf("|_%c_", board[i][j]);

				}
				printf("\n");
			}

		}
		if (begin == '0')
		{


			//设置一个,提醒关机程序;

		}
	
}


void Begingame(char moden,char board[ROW][COL])
{
	void operat(char board[ROW][COL]);

	if (moden == '1')
	{
		//随机位置。
		do {
			int x = 0, y = 0;
			printf("input your position:");
			scanf("%d %d", &x, &y);

			board[x - 1][y - 1] = '*';
			Menu('1', board);
			//computer operat
			if (Iswin(board))
			{
				printf("you win!\n");break;
			}
			operat(board);
			Menu('1', board);
			if (Iswin(board))
			{
				printf("you fail!\n");break;
			}
		} while (1);
    }
	else if (moden == '2')
	{
		//超强人机。
	}

	printf("gameover!\n");
}


int Iswin(char board[ROW][COL])
{  //ROW
	for (int i = 0; i < ROW; i++)
		if (board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][0] != ' ')
			return 1;
	//COL
	for (int i = 0; i < COL; i++)
		if (board[0][i] == board[1][i] && board[0][i] == board[2][i] && board[0][i] != ' ')
			return 1;
	//duijiaoxian
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2]&&board[0][0]!=' ')
		return 1;
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
		return 1;
	return 0;
}

void operat(char board[ROW][COL]) {
	srand(time(NULL));
	do {
		int row = rand() % 3;
		int col = rand() % 3;
		if (board[row][col] == ' ')
		{
			board[row][col] = '#';
			break;
		}
	} while (1);

}

#define _CRT_SECURE_NO_WARNINGS 
#include "game.h"
//设置界面
char board[ROW][COL];
int main()
{
	beginMenu(board);

	//neumePrint;
	char begin,moden;
	printf("请选择\n    进入游戏请按1\n    退出游戏请按0\n");

	scanf("%c", &begin);
	getchar();
	Menu(begin,board);    //输出菜单

	printf("简单模式请按1\n困难模式请按2\n");
	scanf("%c", &moden);         //选择模式
	Begingame(moden,board);

	return 0;
}

emmm,发现这个有必不输的算法后就感觉这个很容易找出规律,就感觉有点无聊了,但这个有点培养全局思维的,一般般吧,这周要忙起学习了,!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值