牛客网-华为机试
HJ5 进制转换 中等
题目描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
输入描述:
输入一个十六进制的数值字符串。注意:一个用例会同时有多组输入数据,请参考帖子https://www.nowcoder.com/discuss/276处理多组输入的问题。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入
0xA
0xAA
输出
10
170
Python 极致偷懒
while True:
try:
print(int(input(),16))
except:
break
C++
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
string data;
while(cin>>data){
int ans=0;
int cur=0;
for(int i=data.length()-1;i>=2;i--){
int tmp=0;
if(data[i]>='A')
tmp=data[i]-'A'+10;
else
tmp=data[i]-'0';
ans+=tmp*pow(16,cur++);
}
printf("%d\n",ans);
}
return 0;
}
HJ6 质数因子 中等
题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
最后一个数后面也要有空格
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
示例1
输入
180
输出
2 2 3 3 5
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
int cn=n;
int m=sqrt(n);
int tmp=1;
for(int i=2;i<=m;i++){
while(n%i==0){
n/=i;
printf("%d ",i);
tmp*=i;
if(tmp==cn){
printf("\n");
return 0;
}
}
}
if(n!=1)
printf("%d ",n);
printf("\n");
}
return 0;
}
HJ8 合并表记录 中等
题目描述
数据表记录包含表索引和数值(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
示例1
输入
4
0 1
0 2
1 2
3 4
输出
0 3
1 2
3 4
#include<iostream>
#include<map>
using namespace std;
int main(){
int n;
cin>>n;
map<int,int> ma;
while(n--){
int key=0,val=0;
cin>>key>>val;
ma[key]+=val;
}
for(auto i=ma.begin();i!=ma.end();i++)
cout<<i->first<<" "<<i->second<<endl;
return 0;
}
HJ9 提取不重复的整数 中等
题目描述
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
保证输入的整数最后一位不是0。
输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
示例1
输入
9876673
输出
37689
#include<iostream>
#include<set>
using namespace std;
int main(){
int n;
cin>>n;
set<int> se;
while(n!=0){
if(se.find(n%10)==se.end()){
cout<<n%10;
se.insert(n%10);
}
n/=10;
}
cout<<endl;
return 0;
}
HJ10 字符个数统计 中等
题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串abaca而言,有a、b、c三种不同的字符,因此输出3。
输入描述:
输入一行没有空格的字符串。
输出描述:
输出范围在(0~127)字符的个数。
示例1
输入
abc
输出
3
#include<iostream>
#include<cstring>
#include<set>
using namespace std;
int main(){
string data;
while(cin>>data){
set<char> se;
for(auto i=data.begin();i!=data.end();i++){
se.insert(*i);
}
cout<<se.size()<<endl;
}
return 0;
}
HJ34 图片整理 中等
题目描述
Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过C语言解决。
本题含有多组样例输入。
输入描述:
Lily使用的图片包括"A"到"Z"、"a"到"z"、"0"到"9"。输入字母或数字个数不超过1024。
输出描述:
Lily的所有图片按照从小到大的顺序输出
示例1
输入
Ihave1nose2hands10fingers
输出
0112Iaadeeefghhinnnorsssv
c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string data;
while(cin>>data)
{
sort(data.begin(),data.end());
cout<<data<<endl;
}
return 0;
}
python3
while True:
try:
s=input()
lst=sorted(s)
print(''.join(str(i) for i in lst))
except:
break
HJ35 蛇形矩阵 中等
题目描述
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
例如,当输入5时,应该输出的三角形为:
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
请注意本题含有多组样例输入。
输入描述:
输入正整数N(N不大于100)
输出描述:
输出一个N行的蛇形矩阵。
示例1
输入
4
输出
1 3 6 10
2 5 9
4 8
7
while(True):
try:
n=int(input())
arr=[]
for i in range(n):
if i==0:
arr=[(j+j*j)//2 for j in range(1,n+1)]
else:
arr=[t-1 for t in arr[1:]]
print(' '.join(str(a) for a in arr))
except:
break