团体程序设计天梯赛 L1 题目合集

团体程序设计天梯赛 L1 题目合集发现自己还能再参加一次天梯赛 在高兴之余 决定把在赛前将所有的天梯赛真题过一遍 希望自己可以取得理想的成绩 但是由于时间问题 而 L1 的题目相对比较简单 没有必要每一题都写详细的题解 就以文本来记录 L1 的题解吧

前言

文章目录

L1-001 Hello World (5分)

#include  
     using namespace std; int main() { 
    cout<<"Hello World!"<<endl; return 0; } 

L1-002 打印沙漏 (20分)

#include  
     using namespace std; int main() { 
    int n; char ch; scanf("%d %c", &n, &ch); // target 表示本次需要使用的符号数 int target = 1, col = 3, row = 1; while ((target + col * 2) <= n) { 
    target += col * 2; col += 2; row++; } col -= 2; // 打印上半部分 for (int i = 0; i < row; i++) { 
    for (int j = 0; j < col - i; j++) { 
    if (j < i) { 
    putchar(' '); } else { 
    putchar(ch); } } putchar('\n'); } // 打印下半部分 for (int i = row - 2; i >= 0; i--) { 
    for (int j = 0; j < col - i; j++) { 
    if (j < i) { 
    putchar(' '); } else { 
    putchar(ch); } } putchar('\n'); } printf("%d", n - target); return 0; } 

L1-003 个位数统计(15分)

#include  
     using namespace std; int mapper[10]; char str[1000]; int main() { 
    scanf("%s", str); for (int i = 0; i < strlen(str); i++) { 
    mapper[str[i] - '0']++; } for (int i = 0; i < 10; i++) { 
    if (mapper[i]) { 
    printf("%d:%d\n", i, mapper[i]); } } return 0; } 

L1-004 计算摄氏温度(5分)

#include  
     using namespace std; int main() { 
    int n; cin >> n; cout << "Celsius = " << 5 * (n - 32) / 9 << endl; return 0; } 

L1-005 考试座位号(15分)

#include  
     using namespace std; // 试机号 -> (准考证号 ,考试号)  map<int, pair<string, int> > mark; int main() { 
    int n, m; cin >> n; for (int i = 0; i < n; i++) { 
    string stuNum; int id, target; cin >> stuNum >> id >> target; mark[id] = make_pair(stuNum, target); } cin >> m; for (int i = 0; i < m; i++) { 
    int t; cin >> t; cout << mark[t].first << " " << mark[t].second << endl; } return 0; } 

L1-006 连续因子(20分)

因为在 ( n , n ] ( \sqrt{n},n] (n
,n]
中是不存在连续因子的,所以我们只需要遍历区间 [ 2 , n ] [2, \sqrt{n}] [2,n
]
,求出所有连续因子,并记录最长连续因子的 “开始因数” 和 “连续长度” 即可。

#include  
     using namespace std; typedef long long ll; int main() { 
    ll n; cin >> n; int isPrime = 1, maxLen = 0, start; for (int i = 2; i <= sqrt(n); i++) { 
    if (n % i == 0) { 
    // cnt 表示以 i 为起点,连续因子的长度 int cnt = 0, temp = n, j = i; while (temp % j == 0) { 
    temp /= j; j++; cnt++; } // 维护 maxLen 和 start if (cnt > maxLen) { 
    maxLen = cnt; start = i; } } } // 注意判断 n 为素数的情况 if (!maxLen) { 
    cout << "1" << endl; cout << n << endl; } else { 
    cout << maxLen << endl; for (int i = start; i < start + maxLen; i++) { 
    if (i != start) { 
    cout << "*"; } cout << i; } } return 0; } 

L1-007 念数字(10分)

#include  
     using namespace std; int main() { 
    string num; cin >> num; for (int i = 0; i < num.length(); i++) { 
    if (i != 0) { 
    putchar(' '); } switch(num[i]) { 
    case '0': printf("ling"); break; case '1': printf("yi"); break; case '2': printf("er"); break; case '3': printf("san"); break; case '4': printf("si"); break; case '5': printf("wu"); break; case '6': printf("liu"); break; case '7': printf("qi"); break; case '8': printf("ba"); break; case '9': printf("jiu"); break; default: printf("fu"); } } return 0; } 

L1-008 求整数段和(10分)

#include  
     using namespace std; int main() { 
    int from, to; cin >> from >> to; int sum = 0, j = 0; for (int i = from; i <= to; i++, j++) { 
    sum += i; printf("%5d", i); if ((j + 1) % 5 == 0) { 
    putchar('\n'); } } // 注意格式问题 if (j % 5 != 0) { 
    putchar('\n'); } printf("Sum = %d", sum); return 0; } 

L1-009 N个数求和(20分)

#include  
     using namespace std; typedef long long ll; ll gcd(ll a, ll b) { 
    return (b == 0) ? a : gcd(b, a % b); } int main() { 
    int n; scanf("%d", &n); ll a = 0, b = 1; for (int i = 0; i < n; i++) { 
    ll ta, tb; scanf("%lld/%lld", &ta, &tb); a = a * tb + ta * b; b = b * tb; ll GCD = gcd(a, b); a /= GCD; b /= GCD; } if (a % b == 0) { 
    printf("%lld\n", a / b); } else if (a > b) { 
    printf("%lld %lld/%lld\n", a / b, a % b, b); } else { 
    printf("%lld/%lld\n", a, b); } return 0; } 

L1-010 比较大小(10分)

#include  
     using namespace std; int main() { 
    int a[3]; cin >> a[0] >> a[1] >> a[2]; sort(a, a + 3); cout << a[0] << "->" << a[1] << "->" << a[2]; return 0; } 

L1-011 A-B(20分)

#include  
     #include  
     using namespace std; unordered_set<char> recordSet; int main() { 
    string a, b; getline(cin, a); getline(cin, b); for (int i = 0; i < b.length(); i++) { 
    recordSet.insert(b[i]); } for (int i = 0; i < a.length(); i++) { 
    if (!recordSet.count(a[i])) { 
    printf("%c", a[i]); } } return 0; } 

L1-012 计算指数(5分)

#include  
     using namespace std; int main() { 
    int n; scanf("%d", &n); printf("2^%d = %d", n, 1 << n); return 0; } 

L1-013 计算阶乘和(10分)

#include  
     using namespace std; int main() { 
    int n; scanf("%d", &n); // fac 表示阶乘 int sum = 0, fac = 1; for (int i = 1; i <= n; i++) { 
    fac *= i; sum += fac; } printf("%d", sum); return 0; } 

L1-014 简单题(5分)

#include  
     using namespace std; int main() { 
    cout << "This is a simple problem."; return 0; } 

L1-015 跟奥巴马一起画方块(15分)

#include  
     using namespace std; int main() { 
    int n; char ch; scanf("%d %c", &n, &ch); for (int i = 0; i < (n + 1) / 2; i++) { 
    for (int j = 0; j < n; j++) { 
    printf("%c", ch); } printf("\n"); } return 0; } 

L1-016 查验身份证(15分)

#include  
     using namespace std; int Z[] = { 
   7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; char M[] = "10X"; int main() { 
    int n; cin >> n; int isAllPassed = 1; while (n--) { 
    string num; cin >> num; int sum = 0, isAllDigit = 1; for (int i = 0; i < 17; i++) { 
    if (!isdigit(num[i])) { 
    isAllDigit = 0; } sum += (num[i] - '0') * Z[i]; } if (!isAllDigit || (num[17] != M[sum % 11])) { 
    cout << num << endl; isAllPassed = 0; } } if (isAllPassed) { 
    cout << "All passed" << endl; } return 0; } 

L1-017 到底有多二(15分)

#include  
     using namespace std; int main() { 
    string num; cin >> num; int len = num.length(); // 数字长度 int isNegative = (num[0] == '-') ? 1 :0; // 是否为负数 int isEven = ((num[len - 1] - '0') % 2 == 0); // 是否为偶数 int twoCnt = 0; for (int i = isNegative; i <= len; i++) { 
    if (num[i] == '2') { 
    twoCnt++; } } double ans = ((double)twoCnt / (len - isNegative)) * (isNegative ? 1.5 : 1) * (isEven ? 2 : 1); printf("%.2f%%", ans * 100); return 0; } 

L1-018 大笨钟(10分)

#include  
     using namespace std; int main() { 
    int h, m; scanf("%d:%d", &h, &m); if ((h < 12) || (h == 12 && m == 0)) { 
    printf("Only %02d:%02d. Too early to Dang.\n", h, m); } else { 
    for (int i = 0; i < ((h - 12) + (m > 0)); i++) { 
    printf("Dang"); } } return 0; } 

L1-019 谁先倒(15分)

#include  
     using namespace std; int main() { 
    int a, b, ta, tb; cin >> a >> b; ta = a, tb = b; int n; cin >> n; for (int i = 0; i < n; i++) { 
    int x, tx, y, ty; cin >> x >> tx >> y >> ty; int isALose = (tx == x + y); int isBLose = (ty == x + y); // 不同时为1,且不同时为0 if (isALose ^ isBLose) { 
    if (isALose) a--; else b--; } if (a < 0) { 
    cout << "A" << endl; cout << tb - b << endl; break; } else if (b < 0) { 
    cout << "B" << endl; cout << ta - a << endl; break; } } return 0; } 

L1-020 帅到没朋友(20分)

#include  
     #include  
     using namespace std; const int maxn = 105; // 需要用 unordered_set,否则有个点会超时 unordered_set<int> pyq[maxn], vis; vector<int> ans; int main() { 
    int n, k, t, m; cin >> n; for (int i = 0; i < n; i++) { 
    cin >> k; for (int j = 0; j < k; j++) { 
    cin >> t; pyq[i].insert(t); } } cin >> m; for (int i = 0; i < m; i++) { 
    cin >> t; if (!vis.count(t)) { 
    vis.insert(t); int isHeadsome = 1; for (int j = 0; j < n; j++) { 
    // 如果他某个朋友圈,且该朋友圈人数大于 1 if (pyq[j].count(t) && pyq[j].size() > 1) { 
    isHeadsome = 0; break; } } if (isHeadsome) { 
    ans.push_back(t); // 为了格式化输出 } } } if (!ans.size()) { 
    printf("No one is handsome\n"); } else { 
    for (int i = 0; i < ans.size(); i++) { 
    if (i != 0) { 
    putchar(' '); } printf("%05d", ans[i]); } } return 0; } 

L1-021 重要的话说三遍(5分)

#include  
     using namespace std; int main() { 
    for (int i = 0; i < 3; i++) { 
    cout << "I'm gonna WIN!" << endl; } return 0; } 

L1-022 奇偶分家(10分)

#include  
     using namespace std; int main() { 
    int n; cin >> n; int evenCnt = 0, oddCnt = 0; for (int i = 0; i < n; i++) { 
    int t; cin >> t; if (t & 1) oddCnt++; else evenCnt++; } cout << oddCnt << " " << evenCnt << endl; return 0; } 

L1-023 输出GPLT(20分)

#include  
     using namespace std; int main() { 
    string str; cin >> str; int G = 0, P = 0, L = 0, T = 0; // 统计数量 for (int i = 0; i < str.length(); i++) { 
    if (str[i] == 'G' || str[i] == 'g') G++; else if (str[i] == 'P' || str[i] == 'p') P++; else if (str[i] == 'L' || str[i] == 'l') L++; else if (str[i] == 'T' || str[i] == 't') T++; } // 按统计结果输出 while (G || P || L || T) { 
    if (G) { 
    putchar('G'); G--; } if (P) { 
    putchar('P'); P--; } if (L) { 
    putchar('L'); L--; } if (T) { 
    putchar('T'); T--; } } return 0; } 

L1-024 后天 (5分)

#include  
     using namespace std; int main() { 
    int n; cin >> n; cout << (n + 1) % 7 + 1 << endl; return 0; } 

L1-025 正整数A+B (15分)

#include  
     using namespace std; int stringToNum(string &str) { 
    int ans = 0; for (int i = 0; i < str.length(); i++) { 
    if (str[i] >= '0' && str[i] <= '9') { 
    ans = ans * 10 + (str[i] - '0'); } else { 
    return -1; } } return (ans > 0 && ans <= 1000) ? ans : -1; } int main() { 
    string aStr, bStr; // 由于输入可能有多个空格,需要注意输入 cin >> aStr; getchar(); getline(cin, bStr); int a = stringToNum(aStr); int b = stringToNum(bStr); if (a == -1) { 
    cout << "?"; } else { 
    cout << a; } cout << " + "; if (b == -1) { 
    cout << "?"; } else { 
    cout << b; } cout << " = "; if (a == -1 || b == -1) { 
    cout << "?"; } else { 
    cout << a + b; } return 0; } 

L1-026 I Love GPLT(5分)

#include  
     using namespace std; int main() { 
    string str = "I Love GPLT"; for (int i = 0; i < str.length(); i++) { 
    cout << str[i] << endl; } return 0; } 

L1-027 出租(20分)

#include  
     using namespace std; const int maxn = 15; int cnt[maxn]; // 用于标记数字是否出现过 int mapper[maxn];// 存储 arr[i] 在号码中的下标 int arr[maxn]; // 需要输出 arr 数组 int main() { 
    string num; cin >> num; for (int i = 0; i < num.length(); i++) { 
    int n = num[i] - '0'; cnt[n]++; } int len = 0; for (int i = 9; i >= 0; i--) { 
    if (cnt[i]) { 
    mapper[i] = len; arr[len++] = i; } } cout << "int[] arr = new int[]{"; for (int i = 0; i < len; i++) { 
    if (i != 0) { 
    cout << ","; } cout << arr[i]; } cout << "};"<< endl; cout << "int[] index = new int[]{"; for (int i = 0; i < num.length(); i++) { 
    if (i != 0) { 
    cout << ","; } int n = num[i] - '0'; cout << mapper[n]; } cout << "};" << endl; return 0; } 

L1-028 判断素数 (10分)

#include  
     using namespace std; bool isPrime(int n) { 
    if (n < 2) return false; if (n == 2) return true; for (int i = 2; i <= sqrt(n); i++) { 
    if (n % i == 0) { 
    return false; } } return true; } int main() { 
    int n; cin >> n; while (n--) { 
    int t; cin >> t; if (isPrime(t)) { 
    cout << "Yes" << endl; } else { 
    cout << "No" << endl; } } return 0; } 

L1-029 是不是太胖了(5分)

#include  
     #include  
     using namespace std; int main() { 
    int n; cin >> n; printf("%.1f", ((n - 100) * 0.9) * 2); return 0; } 

L1-030 一帮一 (15分)

#include  
     using namespace std; const int maxn = 105; pair<int, string> s[maxn]; bool vis[maxn]; // 标记是否访问过 int main() { 
    int n; cin >> n; for (int i = 0; i < n; i++) { 
    cin >> s[i].first >> s[i].second; } for (int i = 0; i < n / 2; i++) { 
    for (int j = n - 1; j >= n / 2; j--) { 
    if (!vis[j] && s[i].first != s[j].first) { 
    vis[j] = true; cout << s[i].second << " " << s[j].second << endl; break; } } } return 0; } 

L1-031 到底是不是太胖了(10分)

#include  
     #include  
     #include  
     using namespace std; int main() { 
    int n; cin >> n; for (int i = 0; i < n; i++) { 
    int h; double w; cin >> h >> w; double sw = (h - 100) * 0.9 * 2; if (fabs(w - sw) < sw * 0.1) { 
    cout << "You are wan mei!" << endl; } else if (w > sw) { 
    cout << "You are tai pang le!" << endl; } else { 
    cout << "You are tai shou le!" << endl; } } return 0; } 

L1-032 Left-pad (20分)

#include  
     using namespace std; string str, ch; int n, len; int main() { 
    cin >> n >> ch; getchar(); getline(cin, str); len = str.length(); if (len < n) { 
    for (int i = 0; i < n - len; i++) { 
    cout << ch; } cout << str << endl; } else { 
    for (int i = len - n; i < len; i++) { 
    cout << str[i]; } } return 0; } 

L1-033 出生年 (15分)

#include  
     using namespace std; int y, n; bool isOk(int y, int n) { 
    set<int> cnt; if (y < 1000) { 
    cnt.insert(0); } while (y != 0) { 
    cnt.insert(y % 10); y /= 10; } return (cnt.size() == n); } int main() { 
    cin >> y >> n; for (int i = y; i < 99999; i++) { 
    if (isOk(i, n)) { 
    printf("%d %04d", i - y, i); break; } } return 0; } 

L1-034 点赞 (20分)

#include  
     #include  #include  
     #include  
     using namespace std; // first 表示出现标签编号,second表示出现次数 bool cmp(const pair<int, int> &A, const pair<int, int> &B) { 
    if (A.second == B.second) { 
    return A.first > B.first; } else { 
    return A.second > B.second; } } int main() { 
    int t, cnt = 0; map<int, int> mapper; cin >> t; for (int i = 0; i < t; i++) { 
    int n; cin >> n; for (int j = 0; j < n; j++) { 
    int k; cin >> k; mapper[k]++; } } vector<pair<int, int> > a; for (auto it = mapper.begin(); it != mapper.end(); it++) { 
    a.push_back(make_pair(it->first, it->second)); } sort(a.begin(), a.end(), cmp); cout << a[0].first << " " << a[0].second << endl; return 0; } 

L1-035 情人节 (15分)

#include  
     using namespace std; vector<string> vec; string str; int main() { 
    while (cin >> str) { 
    if (str == ".") { 
    break; } vec.push_back(str); } int cnt = vec.size(); if (cnt >= 14) { 
    cout << vec[1] << " and " << vec[13] << " are inviting you to dinner..." << endl; } else if (cnt >= 2) { 
    cout << vec[1] << " is the only one for you..." << endl; } else { 
    cout << "Momo... No one is for you ..." << endl; } return 0; } 

L1-036 A乘以B(5分)

#include  
     using namespace std; int main() { 
    int a, b; cin >> a >> b; cout << a * b; return 0; } 

L1-037 A除以B(10分)

#include  
     using namespace std; int main() { 
    int a, b; cin >> a >> b; // 输出的格式主要取决于b的值 if(b == 0) { 
    printf("%d/%d=Error", a, b); } else if (b < 0) { 
    printf("%d/(%d)=%.2lf", a, b, (double)a / b); } else { 
    printf("%d/%d=%.2lf",a, b, (double)a / b); } return 0; } 

L1-038 新世界(5分)

#include  
     using namespace std; int main() { 
    cout << "Hello World" << endl; cout << "Hello New World" << endl; return 0; } 

L1-039 古风排版 (20分)

#include  
     using namespace std; int main() { 
    int n; string str; cin >> n; getchar(); getline(cin, str); int len = str.length(); // 计算总共需要多少列 int line = (len + n - 1) / n; char ans[n + 5][line + 5]; // 核心是将题意需要的格式先存在字符串数组ans中 int r = 0, c = line - 1; for (int i = 0; i < len; i++) { 
    ans[r][c] = str[i]; r++; if (r == n) { 
    r = 0; c--; } } if (r != 0) { 
    // 最后一列缺少的字符 for (int i = r; i < n; i++) { 
    ans[i][c] = ' '; } } for (int i = 0; i < n; i++) { 
    for (int j = 0; j < line; j++) { 
    cout << ans[i][j]; } cout << endl; } return 0; } 

L1-040 最佳情侣身高差(10分)

#include  
     using namespace std; int main() { 
    int n; cin >> n; for (int i = 0; i < n; i++) { 
    string sex; double height; cin >> sex >> height; if (sex == "M") { 
    printf("%.2f\n", height / 1.09); } else { 
    printf("%.2f\n", height * 1.09); } } return 0; } 

L1-041 寻找250(10分)

#include  
     using namespace std; int main() { 
    int ans = 0, num; while (cin >> num) { 
    ans++; if (num == 250) { 
    cout << ans << endl; break; } } return 0; } 

L1-042 日期格式化(5分)

#include  
     int main() { 
    int a, b, c; scanf("%d-%d-%d", &b, &c, &a); printf("%04d-%02d-%02d\n", a, b, c); return 0; } 

L1-043 阅览室(20分)

坑点:不能只用一个数组来存储书号对应的借书时间,然后用是否有借书时间来判断这是本书是否被借过,因为借书时间有可能是在 00:00,然后进行逻辑判断的时候就会认为这本书没有被借过,最后导致 test3 和 test4 过不去。

#include  
     using namespace std; const int maxn = 1005; int n, t, h, m; // vis 表示书籍是否被借过,values 表示借书时间 int vis[maxn], values[maxn]; int main() { 
    cin >> n; for (int i = 0; i < n; i++) { 
    double sum = 0; int cnt = 0; while (cin >> t) { 
    string key; cin >> key; scanf("%d:%d", &h, &m); if (t == 0) { 
    break; } int time = h * 60 + m; if (key == "S") { 
    vis[t] = 1; values[t] = time; } else if (key == "E") { 
    if (vis[t]) { 
    vis[t] = 0; sum += time - values[t]; values[t] = 0; cnt++; } } } printf("%d %.0f\n", cnt, round(cnt ? sum / cnt : sum)); } return 0; } 

L1-044 稳赢 (15分)

#include  
     #include  
     using namespace std; // C++ 11-14 uniform initialize unordered_map<string, string> win { 
    { 
   "ChuiZi", "Bu"}, { 
   "Bu", "JianDao"}, { 
   "JianDao", "ChuiZi"} }; int main() { 
    int k, cnt = 0; cin >> k; string str; while (cin >> str) { 
    if (str == "End") { 
    break; } if (cnt == k) { 
    cnt = 0; cout << str << endl; } else { 
    cnt++; cout << win[str] << endl; } } return 0; } 

L1-045 宇宙无敌大招呼(5分)

#include  
     using namespace std; int main() { 
    string str; cin >> str; cout << "Hello " << str << endl; return 0; } 

L1-046 整除光棍(20分)

涉及到高精度,只能用 Java 的 BigInteger 大法了。

import java.math.BigInteger; import java.util.Scanner; public class Main { 
    public static void main(String[] args) { 
    Scanner cin = new Scanner(System.in); BigInteger num = cin.nextBigInteger(); for (BigInteger i = new BigInteger("1"); ;i = i.multiply(new BigInteger("10")).add(new BigInteger("1"))) { 
    if (i.mod(num).equals(new BigInteger("0"))) { 
    System.out.println(i.divide(num) + " " + i.toString().length()); break; } } cin.close(); } } 

L1-047 装睡(10分)

#include  
     #include  
     using namespace std; int main() { 
    int n; cin >> n; for (int i = 0; i < n; i++) { 
    string str; int p, q; cin >> str >> p >> q; if (((p < 15 || p > 20)) || (q < 50 || q > 70)) { 
    cout << str << endl; } } return 0; } 

L1-048 矩阵A乘以B(15分)

#include  
     using namespace std; const int maxn = 500; int ra, ca, rb, cb; int a[maxn][maxn]; int b[maxn][maxn]; int c[maxn][maxn]; int main() { 
    cin >> ra >> ca; for (int i = 0; i < ra; i++) { 
    for (int j = 0; j < ca; j++) { 
    cin >> a[i][j]; } } cin >> rb >> cb; for (int i = 0; i < rb; i++) { 
    for (int j = 0; j < cb; j++) { 
    cin >> b[i][j]; } } if (ca != rb) { 
    cout << "Error: " << ca << " != " << rb << endl; } else { 
    cout << ra << " " << cb << endl; for (int i = 0; i < ra; i++) { 
    for (int j = 0; j < ca ; j++) { 
    for (int k = 0; k < cb; k++) { 
    c[i][k] += a[i][j] * b[j][k]; } } } for (int i = 0; i < ra; i++) { 
    for (int j = 0; j < cb; j++) { 
    if (j != 0) { 
    cout << " "; } cout << c[i][j]; } cout << endl; } } return 0; } 

L1-049 天梯赛座位分配(20分)

#include  
     #include  
     #include  
     #include  
     using namespace std; vector<int> a[105][15]; vector<int> s, cnt; // s 记录学校队伍数量, cnt记录学校完成分配的队伍数量 unordered_set<int> vis; // 记录已经完成分配的学校 int n; int main() { 
    cin >> n; for (int i = 0; i < n; i++) { 
    int t; cin >> t; s.push_back(t); cnt.push_back(0); } int id = 1, cnt_t = n;; while (cnt_t > 0) { 
    for (int i = 0; i < n; i++) { 
    if (!vis.count(i) && a[i][cnt[i]].size() < 10) { 
    a[i][cnt[i]].push_back(id); // 剩一条队伍的时候,保持间隔 if (cnt_t == 1) { 
    id += 2; } else { 
    id++; } } // i校的本条队伍已经完成分配 if (cnt[i] < s[i] && a[i][cnt[i]].size() == 10) { 
    cnt[i]++; } // i校的队伍已经完成分配 if (!vis.count(i) && cnt[i] == s[i]) { 
    cnt_t--; vis.insert(i); } } } for (int i = 0; i < n; i++) { 
    cout << "#" << i + 1 << endl; for (int j = 0; j < s[i]; j++) { 
    for (int k = 0; k < 10; k++) { 
    if (k != 0) cout << " "; cout << a[i][j][k]; } cout <<endl; } } return 0; } 

L1-050 倒数第N个字符串(15分)

这道题其实就相当于数的进制处理,挺有意思的。

#include  
     using namespace std; int n, m, sum = 1; stack<int> s; int main() { 
    cin >> n >> m; for (int i = 0; i < n; i++) { 
    sum *= 26; } sum -= m; while (sum != 0) { 
    s.push(sum % 26); sum /= 26; } // 如果不足 n 位,则用零补齐 int len = s.size(); for (int i = 0; i < n - len; i++) { 
    s.push(0); } for (int i = 0; i < n; i++) { 
    printf("%c", s.top() + 'a'); s.pop(); } return 0; } 

L1-051 打折(5分)

#include  
     #include  
     using namespace std; int main() { 
    int n, m; cin >> n >> m; printf("%.2f", n * (m * 0.1)); return 0; } 

L1-052 2018我们要赢(5分)

#include  
     int main() { 
    printf("2018\nwo3 men2 yao4 ying2 !\n"); return 0; } 

L1-053 电子汪(10分)

#include  
     using namespace std; int main() { 
    int a, b; cin >> a >> b; for (int i = 0; i < a + b; i++) { 
    cout << "Wang!"; } return 0; } 

L1-054 福到了(15分)

#include  
     using namespace std; int n; string str[105], ch; int main() { 
    cin >> ch >> n; getchar(); for (int i = 0; i < n; i++) { 
    getline(cin, str[i]); } // 检验是否需要倒转 int flag = 0; for (int i = 0; i < n; i++) { 
    for (int j = 0; j < n; j++) { 
    if (str[i][j] != str[n-i-1][n-j-1]) { 
    flag = 1; break; } } if (flag) { 
    break; } } if (!flag) { 
    cout << "bu yong dao le" << endl; } for (int i = 0; i < n; i++) { 
    for (int j = 0; j < n; j++) { 
    if (str[n-i-1][n-j-1] != ' ') { 
    cout << ch; } else { 
    cout << str[n-i-1][n-j-1]; } } cout << endl; } return 0; } 

L1-055 谁是赢家(10分)

#include  
     using namespace std; int main() { 
    int a, b; int zore = 0, one = 0; cin >> a >> b; for (int i = 0; i < 3; i++) { 
    int t; cin >> t; if (t == 0) { 
    zore++; } else { 
    one++; } } if (zore == 3 || (a + zore > b + one && zore > 0)) { 
    cout << "The winner is a: " << a <<" + " << zore << endl; } else if (one == 3 || (b + one > a + zore && one > 0)) { 
    cout << "The winner is b: " << b <<" + " << one << endl; } return 0; } 

L1-056 猜数字 (20分)

#include  
     using namespace std; int main() { 
    int n, num; double avg = 0; string name; vector<pair<string, int> > p; cin >> n; for (int i = 0; i < n; i++) { 
    cin >> name >> num; p.push_back(make_pair(name, num)); avg += num; } avg /= n * 2; int minn = 100; for (int i = 0; i < n; i++) { 
    if (fabs(avg - p[i].second) < minn) { 
    name = p[i].first; minn = fabs(avg - p[i].second); } } printf("%.0f ", avg); cout << name << endl; return 0; } 

L1-057 PTA使我精神焕发(5分)

#include  
     using namespace std; int main() { 
    cout << "PTA shi3 wo3 jing1 shen2 huan4 fa1 !" << endl; return 0; } 

L1-058 6翻了(15分)

当对原字符串进行处理相对麻烦的时候,可以考虑在一个新开的字符串中进行操作。

#include  
     #include  
     #include  
     using namespace std; int main() { 
    string str, ans = ""; getline(cin, str); int len = 0, start = 0; for (int i = 0; i < str.length(); i++) { 
    if (str[i] == '6') { 
    int j = i; while (j < str.length() && str[j] == '6') j++; if (j - i > 9) { 
    ans += "27"; } else if (j - i > 3) { 
    ans += "9"; } else { 
    ans += str.substr(i, j - i); } i = j - 1; } else { 
    ans += str[i]; } } cout << ans << endl; return 0; } 

L1-059 敲笨钟 (20分)

合理的使用 STL 中的函数,可以帮助我们降低题目的难度。

#include  
     #include  
     #include  
     using namespace std; int n; string str; int main() { 
    cin >> n; getchar(); for (int i = 0; i < n; i++) { 
    getline(cin, str); int idx1 = str.find(','); //find 函数返回的是该字符的下标 int idx2 = str.find('.'); cout << idx1 << " " << idx2 << endl; // 注意判断范围,不要造成段错误 if (idx1 - 3 >= 0 && str.substr(idx1 - 3, 3) == "ong" && str.substr(idx2 - 3, 3) == "ong") { 
    int j = idx2, cnt = 0; while (j > idx1 && cnt < 3) { 
    if (str[j] == ' ') { 
    cnt++; } j--; } // 截掉后面三个字,再补上" qiao ben zhong." cout << str.substr(0, j + 1) << " qiao ben zhong." << endl; } else { 
    cout << "Skipped" << endl; } } return 0; } 

L1-060 心理阴影面积(5分)

#include  
     using namespace std; int main() { 
    int x, y; cin >> x >> y; // 大三角形面积 - 小正方形面积 - 下面小三角形的面积 - 右边小三角形的面积 cout << 5000 - (100 - x) * y - (x * y / 2) - (100 - x) * (100 - y) / 2; return 0; } 

L1-061 新胖子公式 (10分)

#include  
     #include  
     #include  
     using namespace std; int main() { 
    double a, b; cin >> a >> b; double ans = a / (b * b); printf("%.1lf\n", ans); if (ans > 25) { 
    cout << "PANG" << endl; } else { 
    cout << "Hai Xing" << endl; } return 0; } 

L1-062 幸运彩票(15分)

#include  
     #include  
     using namespace std; int getNum(char ch) { 
    return ch - '0'; } int main() { 
    int n; string str; cin >> n; while (n--) { 
    cin >> str; int a = getNum(str[0]) + getNum(str[1]) + getNum(str[2]); int b = getNum(str[3]) + getNum(str[4]) + getNum(str[5]); if (a == b) { 
    cout << "You are lucky!" << endl; } else { 
    cout << "Wish you good luck." << endl; } } return 0; } 

L1-063 吃鱼还是吃肉(10分)

做种题的时候要冷静,看清楚的条件,理清楚之后再开始写。基本上只要写男性的情况就可以了,女性的情形只要将前面写好的复制过去,然后根据题意改一下条件句就可以了。

#include  
     using namespace std; int main() { 
    int n; cin >> n; while (n--) { 
    int s, h, w; cin >> s >> h >> w; if (s == 0) { 
    if (h == 129) { 
    cout << "wan mei!"; } else if (h < 129) { 
    cout << "duo chi yu!"; } else { 
    cout << "ni li hai!"; } if (w == 25) { 
    cout << " wan mei!" << endl; } else if (w < 25) { 
    cout << " duo chi rou!" << endl; } else { 
    cout << " shao chi rou!" << endl; } } else { 
    if (h == 130) { 
    cout << "wan mei!"; } else if (h < 130) { 
    cout << "duo chi yu!"; } else { 
    cout << "ni li hai!"; } if (w == 27) { 
    cout << " wan mei!" << endl; } else if (w < 27) { 
    cout << " duo chi rou!" << endl; } else { 
    cout << " shao chi rou!" << endl; } } } return 0; } 

2022年04月21日 02:16:23 更新,寄语:

“相信能看到这里的,都是对算法有一定热爱的人,我建了一个叫做「算法小学徒」公众号,主要输出算法相关的内容,有兴趣的朋友可以来一起玩哦~”

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208928.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午10:26
下一篇 2026年3月19日 上午10:27


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号