1.带分数 #

#include <iostream>
using namespace std;
int x = 0, number = 0, count = 0;

//交换a,b两数
void Swap(int &a,int &b)
{
	int temp=a;
	a=b;
	b=temp;
}
//将数组区间转化为数字
int getNum(int list[], int f, int r)
{
    int i = 0, num = 0;
    for (i = f; i <= r; i++)
        num = list[i] + num * 10;
    return num;
}
void Prim(int list[], int k, int m)
{
	if(k==m-1)
	{
		int a = 0, b = 0, c = 0, bLast = 0;
		for (int i = 0; i < x; i++)
        {
            a = getNum(list, 0, i);
            bLast=((number-a)*list[8])%10;
            for (int j =i+(8-i)/2; j < 8; j++)
            {
                if(list[j]==bLast)
                {
                    b = getNum(list, i+1, j);
                    c = getNum(list, j+1, 8);
                    if (b % c == 0 && a + b / c == number)
					{
                        ++count;
					}
                    break;
                }
            }
        }
	}
	else
	{
		for(int i=k;i<m;i++)
		{
			Swap(list[k],list[i]);
			Prim(list,k+1,m);
			Swap(list[k],list[i]);
		}
	}
}
//主函数
int main()
{
	int list[] = {1,2,3,4,5,6,7,8,9};
	cin>>number;
	int temp = number;
	while (temp != 0)
    {
        ++x;
        temp /= 10;
    }
    Prim(list,0,9);
    cout<<count;
	return 0;
}

2.李白喝酒 #

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int a[15] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, 2, 2, 2}; // -1遇花,2遇店
    int n = 0; // 记录总数

    do {
        int sum = 2; // 初始斗酒数
        for (int i = 0; i < 15; i++) {
            if (a[i] == -1) {
                sum += a[i]; // 遇花喝一斗
            } else {
                sum *= a[i]; // 遇店加一倍
            }
        }
        if (a[14] == -1 && sum == 0) { // a[14]最后一次是遇花且酒正好喝完
            n += 1;
        }
    } while (next_permutation(a, a + 15)); // 全排列

    cout << n << endl;
    return 0;
}

3.第 39 级台阶 #

#include <iostream>
using namespace std;
int num=0;//方案数

void fun(int n,int step)
//n表示有多少台阶数 ,step表示步数
{
  if(n<0)
    return;
  if(n==0)
  {
    if(step%2==0) num++;
    return;
   }
   fun(n-1,step+1);
   fun(n-2,step+1);
}

int main()
{
  fun(39,0);
  cout<<num<<endl;
}

4.穿越雷区 #

#include <iostream>
using namespace std;
char graph[105][105];
bool visited[105][105];
int sx, sy, ex, ey;
int n;
int minStep = 0x3FFFFFFF;
void dfs(int x, int y, int cnt, char pre) {
    if (cnt >= minStep) return;
    if (x < 0 || x >= n || y < 0 || y >= n) return;
    if (visited[x][y]) return;
    if (graph[x][y] != pre) {
        visited[x][y] = true;
        if (x == ex && y == ey) {
            minStep = min(minStep, cnt);
            return;
        }
        dfs(x + 1, y, cnt + 1, graph[x][y]);
        dfs(x - 1, y, cnt + 1, graph[x][y]);
        dfs(x, y + 1, cnt + 1, graph[x][y]);
        dfs(x, y - 1, cnt + 1, graph[x][y]);
        visited[x][y] = false;
    }
}
int main() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> graph[i][j];
            // 输入的同时记录起始点和终点坐标
            if (graph[i][j] == 'A') sx = i, sy = j;
            if (graph[i][j] == 'B') ex = i, ey = j;
        }
    }
    dfs(sx, sy, 0, 'T');
    if (minStep != 0x3FFFFFFF) {

        cout << minStep - 2;
    } else {
        cout << -1;
    }
    return 0;
}

5.迷宫 #

#include <iostream>
#include <string>
#include <queue>

using namespace std;

int maze[35][55];
int dir[][2] = { { 1, 0 }, { 0, -1 }, { 0, 1 }, { -1, 0 } };
char d[4] = { 'D', 'L', 'R', 'U' };
int cnt = 0x3f3f3f3f;
bool vis[35][55];

struct node{
	int x;
	int y;
	string rode;
	int step;
	node(int xx, int yy, string ss, int tt)
	{
		x = xx;
		y = yy;
		rode = ss;
		step = tt;
	}
};

bool check(int x, int y){
	if (x <= 30 && x >= 1 && y <= 50 && y >= 1){
		return true;
	}
	return false;
}

void bfs(int x, int y, string s, int num){
	queue<node> q;
	q.push(node(x, y, s, num));
	while (!q.empty()){
		node now = q.front();
		q.pop();

		vis[now.x][now.y] = true;

		if (now.x == 30 && now.y == 50){
			if (now.step < cnt){
				cnt = now.step;
				cout << now.step << endl;
				cout<< now.rode << endl;
				vis[now.x][now.y] = false;
			}
			continue;
		}

		for (int i = 0; i < 4; i++){
			int tx = now.x + dir[i][0];
			int ty = now.y + dir[i][1];

			if (maze[tx][ty] == 0 && !vis[tx][ty] && check(tx, ty)){
				q.push(node(tx, ty, now.rode + d[i], now.step + 1));
			}
		}
	}
}

int main(){

	for (int i = 1; i <= 30; i++){
		for (int j = 1; j <= 50; j++){
			maze[i][j] = getchar()-'0';
		}
		getchar();
	}

	bfs(1, 1, "", 0);

	return 0;
}

6.跳马 #

#include<iostream>
#include<queue>
using namespace std;
const int X[8] = {-2,-2,-1,-1,1,1,2,2};
const int Y[8] = {-1,1,-2,2,-2,2,-1,1};
int board[9][9];
struct Coordinate{
	int x,y,p;
	Coordinate(int x,int y,int p):x(x),y(y),p(p){}
};
queue<Coordinate> q;
void bfs(){
	Coordinate t = q.front();
	q.pop();
	for(int i=0;i<8;i++){
		int tx = t.x + X[i];
		int ty = t.y + Y[i];
		if(tx<1||tx>8||ty<1||ty>8||board[tx][ty])continue;
		board[tx][ty] = t.p + 1;
		q.push(Coordinate(tx,ty,board[tx][ty]));
	}
}
int main(){
	int x1,y1,x2,y2;
	cin>>x1>>y1>>x2>>y2;
	board[x1][y1] = 1;
	q.push(Coordinate(x1,y1,1));
	bfs();
	cout<<board[x2][y2]-1<<endl;
	return 0;
}

7.路径之谜 #

#include<iostream>
using namespace std;
const int X[4] = {1,-1,0,0};
const int Y[4] = {0,0,1,-1};
int n,a[21],b[21];
bool bo[21][21];
int st[401],p=0;
bool dfs(int x,int y){
	if(!a[y]||!b[x])return false;
	a[y]--,b[x]--;
	if(x==n&&y==n){
		bool bo = true;
		for(int i=1;i<=n;i++)if(a[i]||b[i])bo = false;
		if(bo){
			st[p++] = (x-1)*n+y-1;
			return true;
		}
	}
	for(int i=0;i<4;i++){
		int tx = x + X[i];
		int ty = y + Y[i];
		if(tx<1||tx>n||ty<1||ty>n)continue;
		if(dfs(tx,ty)){
			st[p++] = (x-1)*n+y-1;
			return true;
		}
	}
	a[y]++,b[x]++;
	return false;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)cin>>b[i];
	dfs(1,1);
	cout<<0;
	for(int i=p-2;i>=0;i--)cout<<' '<<st[i];
	return 0;
}

8.未名湖边的烦恼 #

#include<iostream>
using namespace std;
int fun(int n,int m)
{
	if(n<m) return 0;
	if(m==0) return 1;
	return fun(n-1,m)+fun(n,m-1);
}
int main()
{
	int n,m;
    cin>>n>>m;
    cout<<fun(n,m)<<endl;
	return 0;
}

9.大臣的旅费 #

10.2n 皇后问题 #