(3、4)/48(5_13) 编程

这篇文章展示了四个用C++编写的算法:1)动态规划找到字符串中最长的数字子串;2)使用不同相消法找出数组中超过一半长度的数字;3)计算分配糖果的问题,确保相邻的孩子得到的糖果数量差不超过1;4)利用转义表进行进制转换。这些算法都涉及到基础的数据处理和逻辑操作。
摘要由CSDN通过智能技术生成

1、最长的数字串(动态规划、保持最长的数字串在ret里面)

//最长的数字串
int main() {
    string str,cur,max;
    cin>>str;
    for(int i=0;i<=str.length();i++){
        if(str[i]>='0'&&str[i]<='9'){
            cur+=str[i];
        }else{
            if(cur.size()<=max.size()){
                cur.clear();
            }else{
                max=cur;
            }
            //cur.clear();
        }
    }
    cout<<max<<endl;
    return 0;
}

2、超过一半长度的数字(不同相消法)

//超过一半长度的数字
class Solution {
public:
	int MoreThanHalfNum_Solution(vector<int> numbers) {
		if (numbers.empty())return 0;
		int result = numbers[0];
		int times = 1;
		for (int i = 1; i < (numbers.size()); i++){
			if (times != 0){
				if (result == numbers[i]){
					++times;
				}
				else{
					--times;
				}
			}
			else{
				result = numbers[i];
				times = 1;
			}
		}
		int count = 0;
		for (int i = 0; i<numbers.size(); i++){
			if (result == numbers[i]){
				++count;
			}
		}

		if (count>numbers.size() / 2){
			return result;
		}
		else{
			return 0;
		}
	}
};

int main(){
	vector<int> t = { 1, 2, 3, 6, 4, 2, 5, 4, 2, 2, 2, 2, 2, 5, 6, 5, 2, 2, 2, };
	Solution s;
	int re = s.MoreThanHalfNum_Solution(t);
	cout << re << endl;
	return 0;
}

3、计算糖果(注意判断是否存在)

//计算糖果
int main() {
	int a, b, c, d;
	while (cin >> a >> b >> c >> d) {
		int A = (a + c) / 2;
		int B1 = (d + b) / 2;
		int B2 = (c - a) / 2;
		int C = (d - b) / 2;
		if (B1 != B2){
			cout << "No" << endl;
		}
		else{
			cout << A << " " << B1 << " " << C << endl;
		}
	}
	return 0;
}

4、进制转换(转义表)

//进制转换
int main() {
	string s, table = "0123456789ABCDEF";
	int m, n;
	while (cin >> m >> n) {

		bool flag = false;
		//防止m=0时,s内无数据,从而报错
		//if (m == 0){
		//	cout << "0" << endl;
		//}
		if (m < 0){
			m = -m;
			flag = true;
		}
		while (m != 0){
			s = s + table[m%n];//table映射关系10--->A
			m /= n;
		}
		if (flag == true){
			s += "-";
		}
		reverse(s.begin(), s.end()); //反转
		cout << s << endl;
		s.clear();
	}
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值