【牛客华为机试C++实现】

  1. HJ1字符串最后一个单词的长度
#include <iostream>
using namespace std;

int main() {
    
    string s1;
    getline(cin,s1);
    int ans=0;
    int i=s1.length()-1;
    while(i>=0 && s1[i]!=' ')
    {
        i--;
        ans++;
    }
    cout<<ans;
    return 0;   
}

2.HJ2计算某字符出现的次数

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

int main() {
    
    string s;
    char ch;
    getline(cin,s);//string字符串只能这样子输入
    cin>>ch;
    
    int num=0;
    //int j=s.length()-1;
    ch=tolower(ch);
    for(int i=0;i<s.length();i++)
    {
        if(tolower(s[i])==ch)
        {
            num++;
        }

    }
    cout<<num<<endl;
    return 0;  
}

3.HJ3明明的随机数

#include <iostream>
using namespace std;

int main() {
    int arr[1001] = { 0 };
	int n;
	cin >> n;
	while (n--)
	{
		int num;
		cin >> num;
		arr[num] = 1;
	}
	for (int i = 0; i < 1001; i++)
	{
		if (arr[i] == 1)
		{
			cout << i << endl;
		}
	}
}

4.HJ4字符串分割

#include <iostream>
using namespace std;

int main() {
    string s;
	getline(cin, s);
	int a = s.length();
	int b = a % 8;
	if (b != 0)
	{
		b = 8 - b;
		string new_s;
		for (int i = b; i > 0; i--)
		{
			new_s.append("0");

		}
		s.append(new_s);
	}
	a = s.length();
	for (int i = 0; i < a; i += 8)
	{
		string ss;
		ss = s.substr(i, 8);
		cout << ss << endl;
	}
    return 0;
}

5.HJ5进制转换

#include <iostream>
#include<math.h>
using namespace std;

int main() {
    //进制转换,将16进制转换为10进制
	string s;
	getline(cin, s);
	s = s.erase(0,2);
	int i = s.length() - 1;
	int ans = 0;
	for (i; i >= 0; i--)
	{
		if (s[i] >= '0'&&s[i] <= '9')
		{
			ans += (s[i] - '0')*pow(16, s.length() - i-1);//
		}
		else
		{
			ans += (s[i] - 'A'+10)*pow(16, s.length() - i-1);
		}
	}
    cout<<ans<<endl;
    return 0;
}

7.HJ7取近似值

#include <iostream>
#include<math.h>
using namespace std;

int main()
{
	double a, b;
	cin >> a;
	a=modf(a,&b);
	if (a >= 0.5)
	{
		cout << int(b + 1) << endl;

	}
	else
	{
		cout << int(b) << endl;
	}
	system("pause");
	return 0;
}

8.HJ8合并表记录

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

//合并表记录
int main()
{
	int num;
	cin >> num;
	map<int, int>arr;
	bool flag = false;
	while (num>0)
	{
		
		
		int a, b;
		cin >> a >> b;
		flag = false;
		for (map<int, int>::iterator it = arr.begin(); it != arr.end(); it++)
		{
			if (it->first == a)
			{
				arr[a] = arr[a] + b;
				flag = true;
				break;

			}
		}
		if (arr.size()==0||flag != true)
		{
			arr[a] = b;
		}
		
		num--;
				
	}
	
	for (map<int, int>::iterator it = arr.begin(); it != arr.end();it++)
	{
		cout << it->first << " " << it->second << endl;

	}
	
	system("pause");
	return 0;
}

10.HJ10字符个数统计

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

int main() {
    string s;
	getline(cin, s);
	char hash[128] = { -1 };
	int i = s.length() - 1;
	int num = 0;
	for (int j = 0; j <= i; j++)
	{
		
		if (hash[int(s[j])] != s[j])
		{
			hash[int(s[j])] = s[j];
			num++;
		}
	}
	cout << num << endl;
}

12.HJ12字符串反转

#include <iostream>
using namespace std;

int main() {
    string s;
	getline(cin, s);
	int a = s.length();
	if (a == 1)
	{
		cout << s << endl;
		return 0;
	}
	int j = 0;
	string s1=s;
	for (int i = a - 1; i >= 0; i--)
	{
		
		s1[j] = s[i];
		j++;
	}
	cout << s1 << endl;

}

14.HJ14字符串排序

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main() {
    int a;
	cin >> a;
	vector<string>v_s;
	while (a > 0)
	{
		string s;
        cin>>s;
		//getline(cin, s);
		v_s.push_back(s);
        a--;
	}
	sort(v_s.begin(), v_s.end());
	for (int i = 0; i < v_s.size(); i++)
	{
		cout << v_s[i] << endl;
	}
}

17.HJ17坐标移动

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

int main() {
   string s;
	getline(cin, s);//会有换行符
	vector<string>v_s;
	//int a = s.find(";");
	int x = 0;
	int y = 0;
	int length = s.length();
    int len = 0;
	for (int i = 0; i < length; i++)
	{
		
		if (s[i] != ';')
		{
			len++;
			continue;
			
		}
		string sub = s.substr(i - len, len);
		v_s.push_back(sub);
        len = 0;
	}

	for (int i = 0; i < v_s.size(); i++)
	{
		int num = 0;
		if (v_s[i].length() == 3 && v_s[i][1] >= '0' && v_s[i][1] <= '9' && v_s[i][2] >= '0' && v_s[i][2] <= '9')
		{
			num = (v_s[i][1] - '0') * 10 + (v_s[i][2] - '0');
		}
		else if (v_s[i].length() == 2 && v_s[i][1] >= '0' && v_s[i][1] <= '9')
		{
			num = v_s[i][1] - '0';
		}
		switch (v_s[i][0])
		{
		case 'A':
			x = x - num;
			break;
		case 'D':
			x = x + num;
			break;
		case 'S':
			y = y - num;
			break;
		case 'W':
			y = y + num;
			break;
        default:
            break;
		}					
	}
	
	cout << x << "," << y << endl;
}

18.HJ18识别有效的IP地址和掩码并进行分类统计

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

//将string255.255.255转为int并存入容器
vector<int> toint(string str)
{
	vector<int>test;
	int len = 0;
	for (int i = 0; i < str.size(); i++)
	{
		
		while (str[i] != '.'&&i < str.size())
		{
			len++;
			i++;
			//continue;
		}
		string s = str.substr(i - len, len);
		if (s != "")
		{
			int num = stoi(s);
			test.push_back(num);
			len = 0;
		}
		
	}
	return test;
}


//判断掩码是否合法
bool ismask(vector<int>mask_v)
{
	if (mask_v.size() != 4)
	{
		return false;
	}
	if ((mask_v[0] <= 255) && (mask_v[0] >= 0) && (mask_v[1] <= 255) && (mask_v[1] >= 0) && (mask_v[2] <= 255) && (mask_v[2] >= 0) && (mask_v[3] <= 255) && (mask_v[3] >= 0))
	{
		if (mask_v[0] == 255)
		{
			if (mask_v[1] == 255)
			{
				if (mask_v[2] == 255)
				{
					if (mask_v[3] == 254 || mask_v[3] == 252 || mask_v[3] == 248 || mask_v[3] == 240 || mask_v[3] == 224 || mask_v[3] == 192 || mask_v[3] == 128 || mask_v[3] == 0)
					{
						return true;
					}
					else
					{
						return false;
					}

				}
				else if (mask_v[2] == 254 || mask_v[2] == 252 || mask_v[2] == 248 || mask_v[2] == 240 || mask_v[2] == 224 || mask_v[2] == 192 || mask_v[2] == 128 || mask_v[2] == 0)
				{
					if (mask_v[3] == 0)
					{
						return true;
					}
					else
					{
						return false;
					}
				}
			}
			else if (mask_v[1] == 254 || mask_v[1] == 252 || mask_v[1] == 248 || mask_v[1] == 240 || mask_v[1] == 224 || mask_v[1] == 192 || mask_v[1] == 128 || mask_v[1] == 0)
			{
				if (mask_v[2] == 0 && mask_v[3] == 0)
				{
					return true;
				}
				else
				{
					return false;
				}
			}
		}
		else if (mask_v[0] == 254 || mask_v[0] == 252 || mask_v[0] == 248 || mask_v[0] == 240 || mask_v[0] == 224 || mask_v[0] == 192 || mask_v[0] == 128)
		{
			if (mask_v[1] == 0 && mask_v[2] == 0 && mask_v[3] == 0)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
	}
	return false;
}




int main()
{
	
	//识别有效的IP地址和掩码
	vector<int>outcome(7,0);//最后打印的7个数字;
	string s;
	
	while (cin >> s)
	{
		vector<string>temp;
		int len = 0;
		for (int i = 0; i < s.length(); i++)
		{
			while (s[i] != '~'&&i<s.length())
			{
				len++;
				i++;
				//continue;
			}
			string s1 = s.substr(i - len, len);
			temp.push_back(s1);//从字符串中获取IP和子网掩码
			len = 0;
		}
		string ips = temp[0];//分割出来的ip
		string masks = temp[1];//分割出来的掩码
		vector<int>ip, mask;
		ip = toint(ips);
		mask = toint(masks);

		if ((ip[0] == 0) || (ip[0] == 127))
		{
			//不属于合法IP地址,计数时直接忽略
			continue;
		}

		//判断IP和掩码是否合法 ip和掩码分别为4位,如果不为8,则非法
		if (ip.size() + mask.size() == 8 )
		{
			if (ismask(mask))//掩码合法
			{
				if (ip[1] >= 0 && ip[1] <= 255 && ip[2] >= 0 && ip[2] <= 255 && ip[3] >= 0 && ip[3] <= 255)
				{
					if (ip[0] >= 1 && ip[0] <= 126)//A类
					{
						outcome[0]++;
						if (ip[0] == 10)
						{
							outcome[6]++;
						}
					}
					else if (ip[0] >= 128 && ip[0] <= 191)//B类
					{
						outcome[1]++;
						if (ip[0] == 172 && ip[1] >= 16 && ip[1] <= 31)
						{
							outcome[6]++;
						}
					}
					else if (ip[0] >= 192 && ip[0] <= 223)//C类
					{
						outcome[2]++;
						if (ip[0] == 192 && ip[1] == 168)
						{
							outcome[6]++;
						}
					}
					else if (ip[0] >= 224 && ip[0] <= 239)//D类
					{
						outcome[3]++;
					}
					else if (ip[0] >= 240 && ip[0] <= 255)//E类
					{
						outcome[4]++;
					}
					else
					{
						outcome[5]++;
					}
				}
			}
			else
			{
				outcome[5]++;
			}
			
		}
		else
		{
			outcome[5]++;
		}

		
	}
	
	for (int i = 0; i < outcome.size(); i++)
	{
		cout << outcome[i] << " ";
	}
	system("pause");
	return 0;
}

19.HJ19简单的错误记录

#include <iostream>
using namespace std;

struct recoder
{
	string s_filename;
	int s_hangshu;
	int s_num;
};
int main()
{
	string s;
	recoder rec[50];
	string filename;
	int hangshu;
	int num = 0;//记录总记录条数,不超过8
	while (getline(cin,s))
	{
		
		int flag = 0;
		
		int index = s.find_last_of("\\");
		int index2 = s.find_last_of(" ");
		int ci = stoi(s.substr(index2 + 1));
		s = s.substr(index + 1, index2 - index-1);
		if (s.length() > 16)
		{
			s = s.substr((s.length() - 16) , 16);
		}
		
		

		for (int i = 0; i < num; i++)
		{
			if (s == rec[i].s_filename&&ci == rec[i].s_hangshu)
			{
				rec[i].s_num++;
				flag = 1;
				break;
			}
		}
		if (flag != 1)
		{
			rec[num].s_filename = s;
			rec[num].s_hangshu = ci;
			rec[num].s_num = 1;
			num++;
		}


	}
	int i = 0;
	if (num > 8)
	{
		i = num - 8;
	}
	else
	{
		i = 0;
	}
	for (i; i < num; i++)
	{
		cout << rec[i].s_filename << " " << rec[i].s_hangshu << " " << rec[i].s_num << endl;
	}
	system("pause");
	return 0;
}

25.HI25数据分类处理

#include <iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

bool match(int r, int i)
{
	string rr = to_string(r);
	string ii = to_string(i);
	int index = ii.find(rr);
	if (index != std::string::npos)
	{
		return true;
	}
	else
	{
		return false;
	}

}
int main()
{
	int Inum, Rnum;
	while (cin >> Inum)
	{
		vector<int>I, R;
		for (int i = 0; i < Inum; i++)
		{
			int in;
			cin >> in;
			I.push_back(in);
		}
		cin >> Rnum;
		for (int i = 0; i < Rnum; i++)
		{
			int rn;
			cin >> rn;
			R.push_back(rn);
		}
		sort(R.begin(), R.end());//排序
		R.erase(unique(R.begin(), R.end()), R.end());//去重
		vector<int>ivalue, index, cntsize, rvalue;
		for (int i = 0; i < R.size(); i++)
		{
			int cnt = 0;//记录R在I里面出现的数量
			for (int j = 0; j < I.size(); j++)
			{
				if (match(R[i],I[j]))
				{
					cnt++;
					index.push_back(j);//下标
					ivalue.push_back(I[j]);//具体的值
				}
			}
			if (cnt != 0)
			{
				cntsize.push_back(cnt);
				rvalue.push_back(R[i]);
				
			}

		}

		int sum = ivalue.size() + index.size() + cntsize.size() + rvalue.size();
		cout << sum << " ";
        int j = 0;
		for (int i = 0; i < rvalue.size(); i++)
		{
			cout << rvalue[i] << " " << cntsize[i] << " ";
			
			while (cntsize[i]--)
			{
				cout << index[j] << " " << ivalue[j] << " ";
				j++;
			}
		}
		
	}
	system("pause");
	return 0;
}

28.HJ28素数伴侣

#include <iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

bool match(int r, int i)
{
	string rr = to_string(r);
	string ii = to_string(i);
	int index = ii.find(rr);
	if (index != std::string::npos)
	{
		return true;
	}
	else
	{
		return false;
	}

}
int main()
{
	int Inum, Rnum;
	while (cin >> Inum)
	{
		vector<int>I, R;
		for (int i = 0; i < Inum; i++)
		{
			int in;
			cin >> in;
			I.push_back(in);
		}
		cin >> Rnum;
		for (int i = 0; i < Rnum; i++)
		{
			int rn;
			cin >> rn;
			R.push_back(rn);
		}
		sort(R.begin(), R.end());//排序
		R.erase(unique(R.begin(), R.end()), R.end());//去重
		vector<int>ivalue, index, cntsize, rvalue;
		for (int i = 0; i < R.size(); i++)
		{
			int cnt = 0;//记录R在I里面出现的数量
			for (int j = 0; j < I.size(); j++)
			{
				if (match(R[i],I[j]))
				{
					cnt++;
					index.push_back(j);//下标
					ivalue.push_back(I[j]);//具体的值
				}
			}
			if (cnt != 0)
			{
				cntsize.push_back(cnt);
				rvalue.push_back(R[i]);
				
			}

		}

		int sum = ivalue.size() + index.size() + cntsize.size() + rvalue.size();
		cout << sum << " ";
        int j = 0;
		for (int i = 0; i < rvalue.size(); i++)
		{
			cout << rvalue[i] << " " << cntsize[i] << " ";
			
			while (cntsize[i]--)
			{
				cout << index[j] << " " << ivalue[j] << " ";
				j++;
			}
		}
		
	}
	system("pause");
	return 0;
}

44.HJ44Sudoku

#include <bits/stdc++.h>
using namespace std;
int arr[9][9];
bool flag = false;
bool check(int n)
{
	int h = n / 9;
	int l = n % 9;
	for (int i = 0; i <9; i++)
	{
		if (i != h && arr[i][l] == arr[h][l])//发现重复列元素
		{
			return false;
		}
	}


	for (int j = 0; j < 9; j++)
	{
		if (j != l && arr[h][j] == arr[h][l])//发现重复行元素
		{
			return false;
		}
	}


	for (int i = h / 3 * 3; i < h / 3 * 3 + 3; i++)
	{
		for (int j = l / 3 * 3; j < l / 3 * 3 + 3; j++)
		{
			if ((i != h || j != l) && arr[i][j] == arr[h][l])
			{
				return false;
			}
		}
	}
	return true;
}
void dfs(int n)//n是元素的数目,9宫格就是9*9=81,n是81
{
	if (n == 81)//n是81就直接输出
	{
		for (int i = 0; i < 9; i++)
		{
			for (int j = 0; j < 8; j++)
			{
				cout << arr[i][j] << " ";
			}
			cout << arr[i][8] << endl;
		}
		flag = true;
		return;
	}
	
	int h = n / 9;//当前元素所在的行
	int l = n % 9;//当前元素所在的列

	if (arr[h][l] == 0)
	{
		//填数字,回溯法/深度优先
		for (int i = 1; i <= 9; i++)
		{
			arr[h][l] = i;
			if (check(n))
			{
				dfs(n + 1);
				if (flag == true)
				{
					return;
				}
				arr[h][l] = 0;
			}
		}
		arr[h][l] = 0;
	}
	else
	{
		dfs(n + 1);
	}

	
}
int main()
{
	//数独输入
	
	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < 9; j++)
		{
			cin >> arr[i][j];
		}

	}
	//深度优先搜索遍历
	dfs(0);

	system("pause");
	return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值