华为机试练练手(c++代码)

本文将介绍如何解析并实现编程中的复杂逻辑,包括输入输出处理、括号匹配验证、字符串分割、整数转二进制逆序输出及数学问题求解等关键技能。文章深入浅出地解释了每一步操作的原理与实现方法,旨在帮助编程爱好者提升解决问题的能力。
摘要由CSDN通过智能技术生成

输入一个整数,如12336544,或1750,然后从最后一位开始倒过来输出,最后如果是0,则不输出,输出的数字是不带重复数字的,所以上面的输出是456321571。如果是负数,比如输入-175,输出-571

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string str;
	string str1;
	cin>>str;
	string::iterator iter =str1.begin();
	for(int i=str.length()-1;i>=0;i--) {
		if(str[i]=='-')
			cout<<"-";
		else if(str[i]=='0'&&i==str.length()-1)
			continue;
		else if(str1.find(str[i])==-1)
		{
			str1.insert(iter,str[i]);
			iter++;
		}
	}
	cout<<str1<<endl;
	return 0;
}

编程的时候,if条件里面的“(”、“)”括号经常出现不匹配的情况导致编译不过,请编写程序检测输入一行if语句中的圆括号是否匹配正确。同时输出语句中出现的左括号和右括号数量,如if((a==1)&&(b==1))是正确的,而if((a==1))&&(b==1))是错误的。注意if语句的最外面至少有一对括号。提示:用堆栈来做。

输入:if((a==1)&&(b==1))

输出:RIGTH 3 3

输入:if((a==1))&&(b==1))

输出:WRONG 3 4

#include <iostream>
#include <stack>
#include <string>
using namespace std;

stack <char> p;
string str;

int main()
{
	cin>>str;
	int num1=0,num2=0;
	for(int i=0;i<str.length();i++) {
		if(str[i]=='(')
		{
			p.push(str[i]);
			num1++;
		}
		else if(str[i]==')')
		{
			num2++;
			if(p.empty())
			{
				cout<<"WRONG"<<" "<<num1<<" "<<num2<<endl;
				return 0;
			}
			else {
				p.pop();
			}
		}
	}
	if(p.empty()==1)
		cout<<"RIGHT"<<" "<<num1<<" "<<num2<<endl;
	else 
		cout<<"WRONG"<<" "<<num1<<" "<<num2<<endl;
	return 0;
}

输入m个字符串 和一个整数n把字符串M化成以N为单位的段,不足的位数用0补齐。

 n=8 m=9 

123456789划分为:12345678
90000000

123化为 :12300000

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string str;
	string str1;
	int n;
	cin>>str;
	cin>>n;
	int m=str.length();
	int k=m/n;
	if(k==0) {
		for(int i=m;i<n;i++)
			str.append("0");
	}
	else {
		for(int i=m;i<(k+1)*n;i++)
		{
			//str.reserve((k+1)*n);
			str.append("0");
		}
	}
	int j=0,l=n;
	while(k>-1) {
		str1=str.substr(j,l);
		cout<<str1<<endl;
		j=l;
		l=l+n;
		k--;
	}
	return 0;
}

整数化为2进制数,32位长度。然后逆序输出

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str;
	int num,n=0;
	cin>>num;
	while(num) {
		str.push_back(num%2+'0');
		num/=2;
		n++;
	}
	while(n<32)
	{
		str.push_back('0');
		n++;
	}
	for(int i=0;i<str.length();i++)
		cout<<str[i];
	return 0;
}

给定一个数,比如20
然后 再给定几个数字 1 3 5 7 8
1  3  5  7  8
0  0  1  1  1 
因为5+7+8=20

#include<iostream>
#include<string>
using namespace std;
int find(int m,int num[],bool l[],int n)
{
	if(m==0)
		return 1;
	if((m>0&&n<0)||m<0)
		return 0;
	if(find(m-num[n],num,l,n-1))
	{
		l[n]=true;
		return 1;                   //这步需要返回1
	}
	else
		return find(m,num,l,n-1);
}
int main()
{  
	int num[100],m,n=-1;
	cin>>m;
	while(cin>>num[++n]);
	bool *l=new bool[n];
	for(int i=0;i<n;i++)
		l[i]=false;
	if(find(m,num,l,n-1))
	{
		for(int i=0;i<n;i++)
			cout<<l[i]<<" ";
		cout<<endl;
	}
	else
		cout<<"NO"<<endl;
    delete []l;
	return 0;	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值