2023/03/04 机试学习记录

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值