#include<stdio.h> #include<string.h> #define maxn 100005 int ans[maxn];
intmain() { int T, n; memset(ans, 0, sizeof(ans)); // 将该块内容全部设定成指定的值 for (int m = 1; m < maxn; m++) // 枚举所有正整数 { int x = m, y = m; while (x > 0) // x是y的生成元 { y += x % 10; x /= 10; } if (ans[y] == 0 || m < ans[y]) ans[y] = m; // 在生成元位进行标记 } scanf("%d", &T); while (T--) { scanf("%d", &n); printf("%d\n", ans[n]); } return0; }
#include<stdio.h> #include<string.h> #define max 105
// 环状串s的表示法p是否比表示法q的字典序小 intless(constchar *s, int p, int q) { int n = strlen(s); for (int i = 0; i < n; i++) if (s[(p + i) % n] != s[(q + i) % n]) // 达到上限后又会回到第一位 return s[(p + i) % n] < s[(q + i) % n]; return0; }
intmain() { int T; char s[max]; scanf("%d", &T); while (T--) { scanf("%s", s); int ans = 0; // 表示目前为止字典序最小串的位置 int n = strlen(s); for (int i = 0; i < n; i++) if (less(s, i, ans)) ans = i; for (int i = 0; i < n; i++) putchar(s[(i + ans) % n]); putchar('\n'); } return0; }