回文数
回文数
原题链接:https://leetcode.cn/problems/palindrome-number/
给你一个整数 x ,如果 x 是一个回文整数,返回 true;否则返回 false。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
提示:-231 <= x <= 231 - 1
1.整数反转利用整数反转的思想,来处理回文数字问题
12345678910111213class Solution {public: bool isPalindrome(int x) { if (x < 0) return false; long long ans = 0; long long raw = x; while (x) { ans = ans * 10 + x % 10; x /= 10; } return raw == ans; }};
2.字符串反转1234567891011121314class Solution {public: bool isPalindrome(int x) { if (x < 0) return false; string raw = to_string(x); string ans = raw; for (int i = 0, j = raw.length() - 1; i < j; ++i, --j) { char c = ans[i]; ans[i] = ans[j]; ans[j] = c; } return raw == ans; }};
整数反转
整数反转
原题链接:https://leetcode.cn/problems/reverse-integer/
给你一个 32 位的有符号整数 x ,返回其数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)(只允许使用int类型的变量)
提示:-231 <= x <= 231 - 1
1234input:120output:21input:0output:0
123456789101112131415161718class Solution {public: int reverse(int x) { int ans = 0; while (x) { if (ans > INT_MAX / 10 || ans < INT_MIN / 10 || ans == INT_MAX / 10 && x % 10 > 7 || ans == INT_MIN / 10 && x % 10 < -8 ) { ans = 0; break; } ans = ans * 10 + x % 10; x /= 10; } return ans; }};
大统领投票
大统领投票
原题链接:http://oj.haizeix.com/problem/380
第一届地球大统领开始选拔,全地球的所有生物都积极参与投票,现在已知得票结果,请输出新当选的得票数最多的地球大统领的编号和得票数。
输入:输入第一行为一个整数 N 表示参选生物数。(1 ≤ N ≤ 100)接下来 N 行,每行一个整数,表示第 i 名参选生物的票数。票数不会超过 1000位。
输出: 输出得票数最多的生物的编号和票数。
样例:
1234312345679912345678913245678912345678911111111111111
122123456789132456789123456789
思路:
定义一个结构体包含某生物的编号与票数,使用sort方法对结构体排序后输出,时间复杂度: $O(nlogn)$
遍历一遍所有生物,动态更新票数多的答案即可,时间复杂度: $O(n)$
12345678910111213141516171819202122232425262728293031#include <iostream>#include <algorithm>#include <string>using namespace std;struct node{ int num; string score;};//当票数长度相同时,C++中已经重载了小于号可以直接使用进行字典顺序排序bool cmp(const node &a, const node &b){ if(a.score.size() == b.score.size()){ return a.score > b.score; } return a.score.size() > b.score.size();};node bio[105];int main(){ int n; cin >> n; for(int i = 1; i <= n; ++i){ cin >> bio[i].score; bio[i].num = i; ...
奖学金
奖学金
原题链接:http://oj.haizeix.com/problem/375
某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。
期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。
输入:
共 n + 1 行。
第 1 行为一个正整数 n(6 ≤ n ≤ 300),表示该校参加评选的学生人数。
第 2 到 n + 1 行,每行有 3 个用空格隔开的数字,每个数字都在 0 到 100 之间。第 j 行的 3 个数字依次表示学号为 j−1 的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为 n − 1(恰好是输入数据的行号减 1)。
输出:
共 5 行,每行是两个用空格隔开的正整数,依次表示前 5 名学生的学号和总分。
样例:
123456789880 89 8988 98 7890 67 8087 66 9178 89 9188 99 7767 89 6478 89 98
123458 2652 2646 2641 2585 258
思路:
构造student自定义类型,包含学生学号num、语文成绩chinese、数学成绩math、英语成绩english、总分all
进行学生信息的录入,并计算学生的总成绩
利用sort函数对student自定义类型按照给定的排序方式进行排序后进行输出
12345678910111213141516171819202122232425262728293031323334353637#include<iostream>#include<algorithm>using namespace std;//1.构造student自定义类型,包含学生所有信息struct student{ int num, chinese, math, english, all;};student stu[305];bool cmp(const student &a, const student &b){ if(a.all == b.all) ...