被你们虐了一下午的OJ是很辛苦的,让我们来看看题解吧。
平衡是一种很微妙的状态。施加在一个物体上各种力,在什么情况下会使物体保持平衡呢。 假设对于一个力,我们由一个三维向量进行表示(x,y,z)。输入一个物体上的各种力,判断它是否处于平衡状态。
输入一个正整数n,接下来n行,分别输入第i个力的x,y,z
如果该物体保持平衡,输出Balance,否则输出Imbalance
3
1 2 3
-1 -1 -1
0 1 1
Imbalance
4
1 2 3
0 -2 1
2 5 -4
-3 -5 0
Balance
输入的xyz的和等于0即为平衡,不为0则不平衡。
直接将输入的XYZ相加,判断是否等于0即可。
#include
using namespace std;
int main(){
int n;
cin>>n;
int x=0,y=0,z=0;
while(n--){
int a,b,c;
cin>>a>>b>>c;
x+=a; y+=b; z+=c;
}
if(x==0&&y==0&&z==0) cout<<"Balance";else cout<<"Imbalance";
return 0;
}
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按“SCNUSCNU...”这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按SCNU的顺序打印,直到所有字符都被输出。
输入在一行中给出一个长度不超过1000的、仅由英文字母构成的非空字符串。
输出格式:在一行中按题目要求输出排序后的字符串。题目保证输出非空。
wqevzSbbbceeNtytuyyySyyCyNiuoSpNppUasddNaSfnfnf
SCNUSCNUSNUSNSNN
分别统计S,C,N,U的数量然后按顺序输出。
统计SCNU的数量到数组后,不停做循环直到清空数组。
#include
#include
#include
#include
using namespace std;
int main()
{
strings;
inta[4]={0};
getline(cin,s);
transform(s.begin(), s.end(), s.begin(), ::toupper);
for(inti=0;i switch (s[i]) { case 'S' : a[0]++; break; case 'C' : a[1]++; break; case 'N' : a[2]++; break; case 'U' : a[3]++; break; } intflag=1; while(flag) { flag=0; if(a[0]!=0){cout<<"S"; a[0]--;} if(a[1]!=0){cout<<"C"; a[1]--;} if(a[2]!=0){cout<<"N"; a[2]--;} if(a[3]!=0){cout<<"U"; a[3]--;} for(int i=0;i<=3;i++) if(a[i]!=0) flag=1; } return0; } CGY对于素数有着迷之喜爱,而有这么一个素数,是一个收到魔法影响的素数,据说念出它的人。。。。。 无 输出第1226564个素数 该题没有样例输入输出 用暴力解法求出第1226564个素数后直接输出它就好了,如果社会工程学学得好的话可以直接输出。 #include using namespace std; int main(){ cout<<19260817; return0; } 某蒟蒻迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你。 蒟蒻虽然忘记密码,但他还记得密码是由一串字母组成。且密码是由一串字母每个向后移动n为形成。z的下一个字母是a,如此循环。他现在找到了移动前的那串字母及n,请你求出密码。(均为小写) 第一行n 第二行:未移动前的一串字母(长度小于100) 一行,该蒟蒻的密码 1 qwe rxf 这道题就是凯撒密码,输入的n是向后移的位置。 #include int main() { charin[100]; int n,j; scanf("%d%s", &n, in); for(j= 0; in[j] != '\0'; j++) putchar((in[j]-'a'+n)%26+'a'); return0; } 某电线杆上出现了如下的出租信息: 升景坊单间短期出租四个月,550/月(水电煤公摊,网费35元/月)。空调,卫生间,厨房齐全。屋内均为IT行业人士,喜欢安静,所以要求前来出租者最好为同行或者刚毕业的年轻人,爱干净、安静. 有意者电联 联系人:成先生 联系方式:请阅读代码 int[] arr = new int[]{8,2,1,0,3}; int[] index = new int[]{2,0,3,2,4,0,1,3,2,3,3}; String tel = ""; for(int i : index){ tel+= arr[i]; } System.out.println("Tel:"+tel); 有人想租房,却不知道电话号码到底是多少。其实这段代码很简单,index数组就是arr数组的下标,index[0]= 2 对应 arr[2]=1,index[1]=0 对应 arr[0]=8 ,index[2]=3 对应 arr[3]=0,以此类推,很容易得到电话号码为18013820100 WXY觉得这十分有创意,但是她不会编程,于是她找到了你,希望你生成该程序的前两行(因为后面都是一样的)的程序。 一行电话号码(长度不多于20) 两行分别输出代码的前两行,为了统一格式,arr中的数字必须按照递减顺序给出 18013820100 int[] arr = new int[]{8,3,2,1,0}; int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4}; arr数组内的数字是从大到小的出现在电话号码内的数字,index就是对应这一位电话号码的数字在arr内的下标。 #include #include #include using namespace std; int main() { stringstr; cin>> str; intnumber[10] = {0}; for(int i = 0; str[i] != '\0'; i++) number[str[i] - '0']++; vector cout<< "int[] arr = new int[]{"; for(int i = 9; i>=0; i--) { if(number[i] != 0) { if (!vec.empty()) cout << ","; cout << i; vec.push_back(i); } } cout<< "};" << endl; cout<< "int[] index = new int[]{"; for(int i = 0; str[i] != '\0'; i++) { int size = vec.size(); for (int j = 0; j < size; j++) { if (vec[j] == str[i] - '0') { if (i != 0) cout <<","; cout << j; break; } } } cout<< "};" << endl; return0; } 很多童鞋喜欢玩一些lol、dota这类游戏,这类游戏有一个特点,在你不死的情况下连续杀人会有不同称号。 下面输入一组字符,其中只包含K和D,K代表杀敌,D代表死亡,求他最高称号。 0/1/2 - You are a Foolish Man 3 - You are on a Killing Spree 4 - You are Dominating 5 - You have a Mega-Kill 6 - You are Unstoppable 7 - You are Wicked Sick 8 - You have a M-m-m-m....Monster Kill 9 - You are Godlike 10+ - You are Beyond Godlike (Somebody killhim!) 一串仅由K和D构成的字符串s,s的长度小于300 该玩家的最高称号 KKKDKKDDDKKKK You are Dominating 很简单,就是找最长有多少个连续的K。 #include #include #include #include #include using namespace std; const int maxn=305; string s; int main(){ cin>>s; intl=s.length(),maxx=0; for(inti=0;i intkill=0; if(s[i]=='K'){ for(;s[i]=='K';i++)kill++; maxx=max(maxx,kill); continue; } i++; } switch(maxx){ case0: case1: case2:cout<<"You are a Foolish Man"< case3:cout<<"You are on a Killing Spree"< case4:cout<<"You are Dominating"< case5:cout<<"You have a Mega-Kill"< case6:cout<<"You are Unstoppable"< case7:cout<<"You are Wicked Sick"< case8:cout<<"You have a M-m-m-m....Monster Kill"< case9:cout<<"You are Godlike"< case10:cout<<"You are Beyond Godlike (Somebody killhim!)"< } if(maxx>10)cout<<"You are Beyond Godlike (Somebody killhim!)"< return0; } 请你编写程序,根据输入的长度 N 和重复次数 M 循环输出形如 AA..ABB..B....ZZ..Z 的字符串。 输入两个正整数 N≤10000 和 M≤10 。 输出你的字符串。 4 1 4 2 52 2 3 10 27 10 55 2 ABCD AABB AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ AAA AAAAAAAAAABBBBBBBBBBCCCCCCC AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZAAB 会有多组输入,以文件尾(EOF)表示结束。 按照题目要求输出字符串,需要注意的是如果长度过大需要从A开始重新输出。 #include int main() { int N,M; while(scanf("%d%d", &N, &M)!=EOF) { for (int i = 0; i < N; ++i) { printf("%c",'A' + i / M % 26); } printf("\n"); } return0; } 幻方是一种很神奇的N*N矩阵:它由数字1,2,3, … … ,N*N构成,且每行、每列及两条对角线上的数字之和都相同。 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1写在第一行的中间。之后,按如下方式从小到大依次填写每个数(K= 2,3, … ,N*N ): 1.若 (K-1)在第一行但不在最后一列,则将填在最后一行,(K-1)所在列的右一列; 2.若 (K-1)在最后一列但不在第一行,则将填在第一列,( K-1)所在行的上一行; 3.若 ( K-1)在第一行最后一列,则将填在(K-1)的正下方; 4.若 (K-1)既不在第一行,也不在最后一列,如果( K-1)的右上方还未填数, 则将 K填在( K-1)的右上方,否则将填在( K-1)的正下方。 现给定N,请按上述方法构造N?N的幻方。 输入整数n(1<=n<=39且位奇数)幻方的边长 输出文件为n行,输出按照上述方法构造的幻方,两个整数间用单个空格隔开 3 8 1 6 3 5 7 4 9 2 难度一般的纯模拟题目,每填一个数字,就保存一下这个数的坐标。填下个数的时候,刚才保存的坐标就是 (K - 1) 的坐标。跟据此坐标判断 K 应该填到哪个位置。其中,填第一个数的时候需要特判。 #include using namespace std; int a[40][40] = { 0 }; int main() { int n; cin>> n; intstep = 1; intposx, posy; while(step <= n * n) { if(step == 1) a[posx = 1][posy = n / 2 + 1] = step++; else if (posx == 1 && posy != n) a[posx = n][++posy] = step++; else if (posx != 1 && posy == n) a[--posx][posy = 1] = step++; else if (posx == 1 && posy == n) a[++posx][posy] = step++; else if (posx != 1 && posy != n) if (a[posx - 1][posy + 1] == 0) a[--posx][++posy] = step++; else a[++posx][posy] = step++; } for(int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) cout << a[i][j] << " "; cout << endl; } } 在学院里,有许多人的成绩,而排名对于学生来说是十分重要的。期末考试结束了,有一波新鲜的成绩来到了教务处,然而今年的人数十分庞大,在录入成绩后,需要进行一次排序,具体排序规则如下。 首先是学生的年级,高年级的人在前。 其次是学生的成绩,成绩高的在前。 最后是学号,学号小的在前。 输入n表示学生人数(n<=10000),接下来n行,每行从前到后分别为学生年级,学生学号(位数不明),学生姓名(无空格),学生分数(保留两位小数) 输出排序后的成绩单,一行一人,格式与输入格式相同。 6 2016 201620050 Whengcheng 3.33 2015 201533333 Cuoyan 2.98 2015 201520081 Wenzou 3.15 2015 201511122 Chenyao 2.98 2015 20151111 Chenyao 2.98 2013 201322222 Tanjiushi 2.50 2013 201322222 Tanjiushi 2.50 2015 201520081 Wenzou 3.15 2015 20151111 Chenyao 2.98 2015 201511122 Chenyao 2.98 2015 201533333 Cuoyan 2.98 2016 201620050 Whengcheng 3.33 很简单的结构体排序,直接告诉了排序方法,需要注意的是需要使用优化后的排序算法而不是使用一般的排序算法。 #include #include #include #include #include using namespace std; typedef struct Stu{ intgrade; stringnumber; stringname; doublescore; } student; bool cmp(student a,student b); int main(){ int n; cin>>n; student a[10005]; for(int i=1;i<=n;i++)cin>>a[i].grade>>a[i].number>>a[i].name>>a[i].score; sort(a+1,a+n+1,cmp);L1-03又是素数
题目描述:
输入:
输出:
Hint:
参考思路:
参考代码:
L1-04 小书童的密码
题目描述:
输入:
输出:
样例输入:
样例输出:
参考思路:
参考代码:
L1-05 出租
题目描述:
输入:
输出:
输入样例:
输出样例:
参考思路:
参考代码:
L1-06 连杀称号
题目描述:
输入:
输出:
样例输入:
样例输出:
参考思路:
参考代码:
L1-07 输出字符串
题目描述:
输入
输出
样例输入
样例输出
提示
参考思路:
参考代码:
L1-08 神奇的幻方
题目描述:
输入:
输出:
样例输入:
样例输出:
参考思路:
参考代码:
L2-01 成绩排序
题目描述:
输入:
输出:
样例输入:
样例输出:
参考思路:
参考代码: