1003(题目及原解答https://blog.csdn.net/g28_gwf/article/details/81436606)
1.统计某字符出现次数和种类用map最好
2.注意输出时NO和No的区别
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main(){
int N;
cin >> N;
getchar();
for(int i = 0; i < N; i++){
string s;
map<char, int> m;
cin >> s;
int indexP = 0, indexT = 0;
for(int j = 0; j < s.size(); j++){
m[s[j]]++;
if(s[j] == 'P'){
indexP = j;
}
if(s[j] == 'T'){
indexT = j;
}
}
if(m.size() == 3 && m['P'] == 1 && m['T'] == 1 &&
indexT - indexP >= 2 && indexP * (indexT - indexP - 1) == (s.size() - indexT - 1)){
cout << "YES" << endl;
}else{
cout << "NO" << endl;
}
}
return 0;
}
1010(题目及原解答https://blog.csdn.net/g28_gwf/article/details/79991863)
1.注意输出:当输入仅有一组数(此时指数必为0)时,注意输出 “0 0”
#include<iostream>
using namespace std;
int main(){
int a, b;
bool isFirst = true;
while(cin >> a >> b){
if(b != 0){
if(isFirst == true){
cout << a * b << ' ' << b - 1;
isFirst = false;
}else{
cout << ' ' << a * b << ' ' << b - 1;
}
}else{
break;
}
}
if(isFirst == true){
cout << "0 0";
}
return 0;
}
1014(题目及原解答https://blog.csdn.net/g28_gwf/article/details/80018677)
1.在同一循环里判断时要注意break的使用
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main(){
string s1, s2, s3, s4;
cin >> s1 >> s2 >> s3 >> s4;
int len1 = s1.size() < s2.size() ? s1.size() : s2.size();
int len2 = s3.size() < s4.size() ? s3.size() : s4.size();
bool isFirst = true;
map<char, string> m;
m['A'] = "MON";
m['B'] = "TUE";
m['C'] = "WED";
m['D'] = "THU";
m['E'] = "FRI";
m['F'] = "SAT";
m['G'] = "SUN";
string DAY;
int HH, MM;
for(int i = 0; i < len1; i++){
if(s1[i] == s2[i]){
if(s1[i] >= 'A' && s1[i] <= 'G' && isFirst == true){
DAY = m[s1[i]];
isFirst = false;
}else if((s1[i] >= '0' && s1[i] <= '9' || s1[i] >= 'A'
&& s1[i] <= 'N') && isFirst == false){
if(s1[i] >= '0' && s1[i] <= '9'){
HH = s1[i] - '0';
}else{
HH = s1[i] - 'A' + 10;
}
break;
}
}
}
for(int i = 0; i < len2; i++){
if(s3[i] == s4[i] && (s3[i] >= 'A' && s3[i] <= 'Z' ||
s3[i] >= 'a' && s3[i] <= 'z')){
MM = i;
break;
}
}
cout << DAY << ' ';
printf("%02d:%02d\n", HH, MM);
return 0;
}
1015(题目及原解答https://blog.csdn.net/g28_gwf/article/details/80018769)
1.程序结构简单但超时,把cin,cout换成scanf,printf
2.注意多维vector的使用
3.学号不要用string存,会排序失败
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
struct Stu{
int ID;
int D;
int C;
int grade;
};
bool cmp(Stu a, Stu b){
if(a.grade != b.grade){
return a.grade > b.grade;
}else if(a.D != b.D){
return a.D > b.D;
}else if(a.ID != b.ID){
return a.ID < b.ID;
}
}
int main(){
int N, L, H;
cin >> N >> L >> H;
vector<Stu> v[4];
getchar();
for(int i = 0; i < N; i++){
int ID;
int D, C;
scanf("%d %d %d", &ID, &D, &C);
if(C >= L && D >= L){
if(D >= H && C >= H){
v[0].push_back(Stu{ID, D, C, D + C});
}else if(D >= H && C < H){
v[1].push_back(Stu{ID, D, C, D + C});
}else if(D < H && C < H && D >= C){
v[2].push_back(Stu{ID, D, C, D + C});
}else{
v[3].push_back(Stu{ID, D, C, D + C});
}
}
}
for(int i = 0; i < 4; i++){
sort(v[i].begin(), v[i].end(), cmp);
}
cout << v[0].size() + v[1].size() + v[2].size() + v[3].size() << endl;
for(int i = 0; i < 4; i++){
for(int j = 0; j < v[i].size(); j++){
printf("%d %d %d\n", v[i][j].ID, v[i][j].D, v[i][j].C);
}
}
return 0;
}
1017 (题目及原解答https://blog.csdn.net/g28_gwf/article/details/81447907)
1.注意去除输出中第一个0的正确方法:在输出字符串的时候,若某数非0且为第一个非0数,则从次数开始输出
2.若最后输出字符串长度不为0且没有输出过,说明数值为0,应当手动输出一个0
#include<iostream>
#include<string>
using namespace std;
int main(){
string A, Q = "";
int B, R = 0;
cin >> A >> B;
int q;
for(int i = 0; i < A.size(); i++){
q = R * 10 + A[i] - '0';
R = q % B;
Q += q / B + '0';
}
bool isFirst = true;
for(int i = 0; i < Q.size(); i++){
if(isFirst == true){
if(Q[i] != '0'){
cout << Q[i];
isFirst = false;
}
}else{
cout << Q[i];
}
}
if(isFirst == true && Q.size() != 0){
cout << '0';
}
cout << ' ' << R << endl;
return 0;
}
1018(题目及原解答https://blog.csdn.net/g28_gwf/article/details/80170322)
1.用map储存次数时可能会遇到某元素未出现的情况,此时要为map的键值对做初始化,如全部赋0
#include<iostream>
#include<vector>
#include<map>
using namespace std;
int main(){
int N;
cin >> N;
map<char, int> jW;
jW['B'] = 0;
jW['J'] = 0;
jW['C'] = 0;
map<char, int> yW;
yW['B'] = 0;
yW['J'] = 0;
yW['C'] = 0;
vector<int> j(3);
vector<int> y(3);
for(int i = 0; i < N; i++){
char A, B;
cin >> A >> B;
if(A == 'C' && B == 'J' || A == 'J' && B == 'B'
|| A == 'B' && B == 'C'){
jW[A]++;
j[0]++;
y[2]++;
}else if(B == 'C' && A == 'J' || B == 'J' && A == 'B'
|| B == 'B' && A == 'C'){
yW[B]++;
y[0]++;
j[2]++;
}else if(A == B){
j[1]++;
y[1]++;
}
}
for(int i = 0; i < 3; i++){
if(i != 2){
cout << j[i] << ' ';
}else{
cout << j[i] << endl;
}
}
for(int i = 0; i < 3; i++){
if(i != 2){
cout << y[i] << ' ';
}else{
cout << y[i] << endl;
}
}
int maxN = -1;
char index;
for(auto it = jW.begin(); it != jW.end(); it++){
if(maxN < it->second){
maxN = it->second;
index = it->first;
}
}
cout << index << ' ';
maxN = -1;
for(auto it = yW.begin(); it != yW.end(); it++){
if(maxN < it->second){
maxN = it->second;
index = it->first;
}
}
cout << index << endl;
return 0;
}
1020(题目及原解答https://blog.csdn.net/g28_gwf/article/details/80170985)
1.没有明确指定类型的数据应当使用double来储存
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct Cake{
double total;
double amount;
double price;
};
bool cmp(Cake a, Cake b){
return a.price > b.price;
}
int main(){
int N;
double D;
cin >> N >> D;
vector<Cake> v(N);
for(int i = 0; i < N; i++){
cin >> v[i].amount;
}
for(int i = 0; i < N; i++){
cin >> v[i].total;
v[i].price = 1.0 * v[i].total / v[i].amount;
}
sort(v.begin(), v.end(), cmp);
double ans = 0.0;
for(int i = 0; i < N; i++){
if(D > v[i].amount){
ans += v[i].total;
D -= v[i].amount;
}else{
ans += v[i].price * D;
break;
}
}
printf("%.2lf\n", ans);
return 0;
}
1024(题目及原解答https://blog.csdn.net/g28_gwf/article/details/80208686)
1.不需要用声明新的字符串,直接输出新字符串即可
2.当指数e大于0时,小数点所需右移位数为e + 2个
#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
int main(){
string s;
cin >> s;
if(s[0] == '-'){
cout << '-';
}
string num = "";
string n = "";
int i;
for(i = 1; s[i] != 'E'; i++){
num += s[i];
}
i++;
for(; i < s.size(); i++){
n += s[i];
}
int e = atoi(n.c_str());
if(e < 0){
cout << "0.";
for(int i = 0; i < -e - 1; i++){
cout << '0';
}
for(int i = 0; i < num.size(); i++){
if(num[i] != '.'){
cout << num[i];
}
}
}else{
int len = 0;
int i;
for(i = 0; i < num.size() && len < e + 2; len++, i++){
if(num[i] != '.'){
cout << num[i];
}
}
if(i != num.size()){
cout << '.';
while(i != num.size()){
cout << num[i++];
}
}
if(len != e){
while(len != e + 2){
cout << '0';
len++;
}
}
}
return 0;
}
1025(题目及原解答https://blog.csdn.net/g28_gwf/article/details/80377433)
1.节点数量与实际adddress不同(不知道为什么)
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
struct Node {
int Address;
int Data;
int Next;
};
int main() {
vector<int> address;
map<int, Node> m;
int head, N, K;
cin >> head >> N >> K;
for (int i = 0; i < N; i++) {
int add;
cin >> add;
cin >> m[add].Data >> m[add].Next;
m[add].Address = add;
}
int p = head;
while (p != -1) {
address.push_back(p);
p = m[p].Next;
}
int cnt = address.size();
for (int i = 0; i < cnt - cnt % K; i += K) {
reverse(address.begin() + i, address.begin() + i + K);
}
for (int i = 0; i < cnt - 1; i++) {
printf("%05d %d %05d\n", address[i], m[address[i]].Data, address[i + 1]);
}
printf("%05d %d %d\n", address[cnt - 1], m[address[cnt - 1]].Data, -1);
return 0;
}