目 录
1.L1-021 重要的话说三遍
2.L1-022 奇偶分家
3.L1-023 输出GPLT
4.L1-024 后天
5.L1-025 正整数A+B
6.L1-026 I Love GPLT
7.L1-027 出租
8.L1-028 判断素数
9.L1-029 是不是太胖了
10.L1-030 一帮一
1.L1-021 重要的话说三遍
代码:
#include<iostream>using namespace std;signed main(){for (int i=0;i<3;i++) cout<<"I'm gonna WIN!"<<endl;return 0;
}
2.L1-022 奇偶分家
分析:
可以使用位运算快速判断奇偶
代码:
#include<iostream>using namespace std;
int n;
int nums;int sum1,sum2;
signed main(){cin>>n;while(n--) {cin>>nums;if (nums&1) sum1++;else sum2++;}cout<<sum1<<" "<<sum2;return 0;
}
3.L1-023 输出GPLT
分析:
题目要我们调整字符串内GPLT的次序,在左边的字符串输出完了,右边如果还有剩余依旧要保持相对次序知道所有的GPLT输出完毕,所以我们全部将数量存起来,用四个计数变量输出即可
代码:
#include<iostream>using namespace std;string s;
int sumG,sumP,sumT,sumL;
signed main(){cin>>s;for(int i=0;i<s.size();i++){if (toupper(s[i])=='G') sumG++;else if (toupper(s[i])=='P') sumP++;else if (toupper(s[i])=='T') sumT++;else if (toupper(s[i])=='L') sumL++;} while(sumG || sumP || sumT || sumL){if (sumG) cout<<"G",sumG--;if (sumP) cout<<"P",sumP--;if (sumL) cout<<"L",sumL--;if (sumT) cout<<"T",sumT--;}return 0;
}
4.L1-024 后天
分析:
我们如果后天的编号超出了7,我们区间循环一下取余输出,没超出就原数输出
代码:
#include<iostream>using namespace std;signed main(){int n;cin>>n;cout<<((n+2)>7?n-5:n+2);return 0;
}
5.L1-025 正整数A+B
分析:
题目大意如下:
给出一个带多个空格的字符串,要求将第一个空格作为分隔,判断前后是否为数值,如果是则原样输出,不是则输出问号;当两边都是数值的时候等式右边还要输出结果,否则也输出问号。
所以我们书写两个find函数,一个碰到第一个空格时截止,第二个读取完剩下的字符串,然后经由一个判断规则来判断这两个字符串是否都为数值
这道字符串出的确实有点恶心,需要仔细审题
代码:
#include<iostream>
#include<string>
#define debug(x) cout<<#x<<"的值为"<<x<<endl;
using namespace std;
string s;// 出现符号
// 出现非数字
int index=0;
bool flag;
int finds(string s){int nums=0;int i;for( i=index;i<s.size();i++){
// debug(s[i])if(s[i]==' '){index=i+1;return (nums==0 ||nums>1000 || nums<1) ?-1:nums;}if(s[i]<'0' || s[i]>'9') {while(s[i]!=' ') i++;index=i+1;return -1;}nums*=10;nums+=s[i]-'0';}
// debug(nums);index=i+1;if (nums>1000 || nums<1) return -1;return nums;
}int findTwo(string a){int nums=0;for(int i=index;i<a.size();i++){if (s[i]<'0' || s[i]>'9') return -1;nums*=10;nums+=s[i]-'0';}if (nums>1000 || nums<1) return -1;return nums;
}
// 测试点3
// 123 123 kjaksdjsigned main(){getline(cin,s);
// cout<<s<<endl;
// 寻找第一次空格区间 int lefts=finds(s);if (lefts==-1) cout<<"?",flag=true;else cout<<lefts;cout<<" + ";int rights=findTwo(s);
// debug(index);if (rights==-1) cout<<"?",flag=true;else cout<<rights;cout<<" = ";if (flag) cout<<"?";else cout<<lefts+rights<<endl;return 0;
}
6.L1-026 I Love GPLT
代码:
#include<iostream>using namespace std;string s="I Love GPLT";
signed main(){for(int i=0;i<s.size();i++){cout<<s[i]<<endl;}return 0;
}
7.L1-027 出租
分析:
我们将输出部分分为6个部分,详见代码函数调用
前面的排序使用set自动帮我们做,后面的下标遍历我们用双重循环暴力枚举
代码:
#include<iostream>
#include<algorithm>
#include<set>#define debug(x) cout<<"变量"<<#x<<"的值是:"<<x<<endl;
using namespace std;string s;
int arr[20];set<int,greater<int> > myset;
int sss[20];
int index=0;
void print1(){cout<<"int[] arr = new int[]{";
} void printData1(set<int,greater<int> > myset){for(auto it = myset.begin(); it != myset.end(); ++it) {if (it!=myset.begin()) cout<<","; cout<<(*it);sss[index++]=(*it);}
}void print2(){cout<<"};"<<endl;
}void print3(){cout<<"int[] index = new int[]{";
}
void printData2() {bool flag=false;
// debug(s.size())
// debug(myset.size())for(int i=0;i<s.size();i++){for(int j=0;j<myset.size();j++){if ((s[i]-'0')==sss[j]) {if (flag) cout<<",";cout<<j;flag=true;}}}
}
void print4(){cout<<"};";
}
signed main(){cin>>s;for(int i=0;i<s.size();i++){arr[i]=s[i]-'0';
// debug(arr[i]);myset.insert(arr[i]); }print1();printData1(myset); print2();print3();printData2();print4(); return 0;
}
8.L1-028 判断素数
代码:
#include<iostream>
#include<cmath>
using namespace std;bool check(int num){if (num<2) return false;if (num==2) return true;for(int i=2;i<=sqrt(num);i++){if (num%i==0) return false;}return true;
}
int nums;
signed main(){int n;cin>>n;while(n--){cin>>nums;if (check(nums)){cout<<"Yes"<<endl;}else {cout<<"No"<<endl;}}return 0;
}
9.L1-029 是不是太胖了
代码:
#include<iostream>
#include<iomanip>using namespace std;double s;
signed main() {cin>>s;cout<<fixed<<setprecision(1)<<(s-100)*0.9*2;return 0;
}
10.L1-030 一帮一
分析:
我们将所有学生的信息存入结构体,使用双重循环,第一重从前往后遍历没有配对的好学生,第二重从为第一重的好学生找搭子,题目保证能找到,我们的循环这样写就ok了
看数据规模,n^2算法够用了
代码:
#include<iostream>
#include<iomanip>using namespace std;int n;
char s;
string name;struct sss {
// int indexs;char s;string name;bool check;
};int index1,index2;
struct sss ttt[55];
//struct sss ttt1[50];
//int coun=0;
signed main() {cin>>n;for(int i=0;i<n;i++){cin>>s>>name;ttt[i].s=s;ttt[i].name=name;ttt[i].check=false;} for(int i=0;i<n;i++){for(int j=n-1;j>=0;j--){if (ttt[i].s!=ttt[j].s && ttt[i].check==false && ttt[j].check==false){ttt[i].check=true , ttt[j].check=true;cout<<ttt[i].name<<" "<<ttt[j].name<<endl;break;}}
// if (coun==n/2) break;}return 0;
}