2 条题解

  • 2
    @ 2023-8-30 14:46:46
    #include<bits/stdc++.h>
    int n, m, a, k;
    bool check(int f) {
    	int t = 0, b = a;
    	for (int i = 0; i < n; i ++) {
    		int x = f % 10, y = b % 10;
    		if (abs(x - y) == 1 || abs(x - y) == 9) t ++;
    		else if (abs(x - y) >= 2) return 0;
    		f /= 10, b /= 10;
    	}
    	return t <= k;
    }
    int main() {
    	scanf("%d%d%d", &n, &a, &k);
    	for (int i = 0; i < pow(10, n); i ++)
    		if (check(i)) printf("%d\n", i);
    	return 0;
    }
    

    最简单

    • 0
      @ 2023-8-15 9:02:20
      #include <cstdio>
      #include <vector>
      #include <algorithm>
      using namespace std;
      vector<int> run(int n, int a, int k) {
      	vector<int> res;
      	int g = a % 10;
      	int b1 = g - 1, b2 = g + 1;
      	if (b1 < 0) b1 = 9;
      	else if (b2 > 9) b2 = 0;
      	if (k <= 0) {
      		res.push_back(a);
      		return res;
      	} else if (n == 1) {
      		res.push_back(b1);
      		res.push_back(b2);
      		res.push_back(g);
      		return res;
      	}
      	vector<int> l1 = run(n - 1, a / 10, k - 1);
      	for (int i : l1)
      		res.push_back(i * 10 + b1),
      		res.push_back(i * 10 + b2);
      	vector<int> l2 = run(n - 1, a / 10, k);
      	for (int i : l2)
      		res.push_back(i * 10 + g);
      	return res;
      }
      int main() {
          int n, a, k;
          scanf("%d%d%d", &n, &a, &k);
          vector<int> resl = run(n, a, k);
          sort(resl.begin(), resl.end());
          for (int i : resl) printf("%d\n", i);
          return 0;
      }
      

      最优解

      • 1

      信息

      ID
      105
      时间
      1000ms
      内存
      256MiB
      难度
      9
      标签
      (无)
      递交数
      121
      已通过
      6
      上传者