题目:
这道题,主要是左边的小于右边的值都删去,然后特判一下逆序的就可以直接删去后面的数
#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,发现这个有必不输的算法后就感觉这个很容易找出规律,就感觉有点无聊了,但这个有点培养全局思维的,一般般吧,这周要忙起学习了,!!!!