- 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;
}