KY37 小白鼠排队
描述
N只小白鼠(1 <= N <= 100),每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量,要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色。帽子的颜色用“red”,“blue”等字符串来表示。不同的小白鼠可以戴相同颜色的帽子。白鼠的重量用整数表示。
思路
创建小鼠结构体,将结构体存入vector中,自定义排序规则
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
class mouse {
public:
int m_weight;
string m_hat;
};
bool myCompare(mouse m1, mouse m2) {
return m1.m_weight > m2.m_weight;
}
int main() {
int count;
cin >> count;
vector<mouse> vm1;
while (count--) {
mouse m1;
cin >> m1.m_weight >> m1.m_hat;
vm1.push_back(m1);
}
sort(vm1.begin(), vm1.end(), myCompare);
for (vector<mouse>::iterator vmbeg = vm1.begin(); vmbeg != vm1.end(); vmbeg++) {
cout << (*vmbeg).m_hat << endl;
}
return 0;
}
备注
创建多个对象可以直接创建然后存入容器中
KY158 找x
描述
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
C语言
#include <stdio.h>
int main() {
int count, x, ret = -1;
int arr[200];
scanf("%d", &count);
for (size_t i = 0; i < count; i++) {
int temp;
scanf("%d",&temp);
arr[i] = temp;
}
scanf("%d", &x);
for (size_t i = 0; i < count; i++) {
if (arr[i] == x) {
ret = i;
}
}
printf("%d",ret);
return 0;
}
C++
#include <iostream>
#include<vector>
using namespace std;
int main() {
int count, x, ret = -1;
vector<int> vi1;
cin >> count;
for(size_t i = 0; i < count; i++){
int temp;
cin >> temp;
vi1.push_back(temp);
}
cin >> x;
for(size_t i = 0; i < count; i++){
if(vi1[i] == x)
ret = i;
}
cout << ret;
return 0;
}
KY199 查找
描述
输入数组长度 n 输入数组 a[1…n] 输入查找个数m 输入查找数字 b[1…m]输出 YES or NO 查找有则YES 否则NO 。
思路
用两个容器存数,用二分法查找
代码
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
bool My_Binary_Search(vector<int> v, int x) {
int low = 0, high = v.size() - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (v[mid] < x) {
low = mid + 1;
} else if (v[mid] > x) {
high = mid - 1;
} else
return true;
}
return false;
}
int main() {
int n1Count, n2Count;
vector<int> v1, v2;
cin >> n1Count;
for (size_t i = 0; i < n1Count; i++) {
int temp;
cin >> temp;
v1.push_back(temp);
}
cin >> n2Count;
for (size_t i = 0; i < n2Count; i++) {
int temp;
cin >> temp;
v2.push_back(temp);
}
sort(v1.begin(), v1.end());
for (size_t i = 0; i < n2Count; i++) {
if (My_Binary_Search(v1, v2[i])) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
KY198 找最小数
描述
第一行输入一个数n,1 <= n <= 1000,下面输入n行数据,每一行有两个数,分别是x y。输出一组x y,该组数据是所有数据中x最小,且在x相等的情况下y最小的。
思路
创建结构体,存入vector容器,自定义排序,输出最前的一个
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class arr {
public:
int x;
int y;
};
bool My_Compare(arr v1, arr v2) {
if (v1.x < v2.x)
return true;
else if (v1.x == v2.x && v1.y < v2.y)
return true;
else
return false;
}
int main() {
vector<arr> v1;
int count;
cin >> count;
for (size_t i = 0; i < count; i++) {
int temp1, temp2;
cin >> temp1 >> temp2;
arr a;
a.x = temp1;
a.y = temp2;
v1.push_back(a);
}
sort(v1.begin(), v1.end(), My_Compare);
cout << (*v1.begin()).x << " " << (*v1.begin()).y << endl;
return 0;
}
KY54 打印极值点下标
描述
在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称该整数为一个极值点,极值点的下标就是i。
思路
for循环遍历容器,单独遍历首尾
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int count;
while (cin >> count) {
vector<int> v1;
for (size_t i = 0; i < count; i++)
{
int temp;
cin >> temp;
v1.push_back(temp);
}
if (v1[0] != v1[1])
cout << 0 << " ";
for (size_t i = 1; i < count - 1; i++)
{
if (v1[i] > v1[i - 1] && v1[i] > v1[i + 1])
cout << i << " ";
else if (v1[i] < v1[i - 1] && v1[i] < v1[i + 1])
cout << i << " ";
}
if (v1[count - 1] != v1[count - 2])
cout << count - 1;
cout << endl;
}
return 0;
}
KY18 特殊乘法
描述
写个算法,对2个小于1000000000的输入,求结果。 特殊乘法举例:123 * 45 = 14 +15 +24 +25 +34+35
问题
s1[i] - '0'
才表示数字的真值,s1[i]
表示数字的ASCII码
对字符串的操作,要考虑操作ASCII码
代码
#include <iostream>
using namespace std;
int main() {
string s1, s2;
int ret = 0;
while (cin >> s1 >> s2) { // 注意 while 处理多个 case
for (int i = 0; i < s1.size(); i++) {
for (int j = 0; j < s2.size(); j++) {
ret += ((s1[i] - '0')* (s2[j] - '0'));
}
}
cout << ret;
}
return 0;
}
KY33 密码翻译
描述
在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,则可得到一个简单的加密字符串。
思路
遍历字符串,遇见需要修改的字符就++
注意对ASCII码的操作
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
string s1;
while (getline(cin, s1)) {
for (size_t i = 0; i < s1.size(); i++) {
if (s1[i] == 'z' || s1[i] == 'Z')
s1[i] -= 25;
else if (('a' <= s1[i] && s1[i] <= 'y') ||
'A' <= s1[i] && s1[i] <= 'Y')
s1[i]++;
}
cout << s1;
}
return 0;
}