A. Wrong Subtraction
输入两个数,n和k,n是初始的数,k为操作数,如果个位为就除以10,不为0则减1,求k次操作后的数
#include<cstdio> using namespace std; int main() { int n, k; scanf("%d%d", &n, &k); while (k--) { if (n % 10 == 0) n /= 10; else n--; } printf("%d\n", n); return 0; }
B. Two-gram
输入一个数n,再输入一个长度为n的字符串
#include<cstdio> using namespace std; char s[150]; int a[150]; int main() { int n; scanf("%d", &n); scanf("%s", s); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) if (s[i] == s[j] && s[i + 1] == s[j + 1]) a[i]++; } int Max = -1; int m = 0; for (int i = 0; i < n; i++) if (a[i] > Max) Max = a[i] , m = i; printf("%c%c\n", s[m], s[m + 1]); return 0; }
C. Less or Equal
输入n和k,n个数,求x,使x为n个数中小于等于x的数的个数为k
#include<cstdio> #include<algorithm> using namespace std; int a[200050]; int main() { int n, k; scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) scanf("%d", &a[i]); sort(a, a + n); if (k == 0) { if (a[0] == 1) printf("-1\n"); else { printf("1\n"); return 0; } } else { if (a[k] == a[k - 1]) printf("-1\n"); else { printf("%d\n", a[k - 1]); } } return 0; }
D. Divide by three, multiply by two
输出一组数进行排序,排序方法为前面的数为后面的数的3倍或一半
#include<cstdio> #include<iostream> using namespace std; const int maxn = 10; int n; bool vis[maxn]; int ans[maxn]; void DFS(int step) { if (step >= n) { for (int i = 0; i < n; i++) cout << ans[i] << " "; cout << endl; return; } for (int i = 1; i <= n; i++) { if (!vis[i]) { vis[i] = true; ans[step] = i; DFS(step + 1); vis[i] = false; } } } int main() { cin >> n; DFS(0); return 0; }
先写这么多,赶火车,有时间再写