输入数值序列i行(0<i),每一行分别是进制和数值,以“#”分割。如:n#m, n是整数,代表n进制(1<n<17),m是n进制下的数值.
输入序列以结束符”END”结束。
m的字符集为0-9和A-F,保证数值在十进制下不超过1e9,行数不超过100001行。
输出j行(0<j<=i),每一行都是输入序列的“异数”。要求:
1.按照输入序列的原序输出;
2.如果没有”异数”,输出字符串”None”
3.结束符“END”不用输出
10#15 4#32 4#33 8#17 END
4#32
//package com.mingzhouL.exer;
/**
* @author LMZ
* @create 2020-05-14-11:21
*/
/*
思路:写一个方法,用于将任意进制转为十进制
主函数中,读入一个进制数就放到方法里面求结果
给出三个list分别存储输入序列、当前序列对应的十进制数、所有异数
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
int temp = Integer.MAX_VALUE;//用于记录相同的数值
ArrayList<String> as = new ArrayList<String>();//存储输入的序列
ArrayList<Integer> ai = new ArrayList<Integer>();//用于记录当前序列的十进制数
ArrayList<Integer> ad = new ArrayList<Integer>();//用于记录异数
while(!(str = br.readLine()).equals("END")){
as.add(str);
String[] nowstr = str.split("#");
int n = Integer.parseInt(nowstr[0]);
int num = xToten(n,nowstr[1]);
ai.add(num);
if(ad.contains(num)){
temp = num;
ad.remove(new Integer(num));
}
else
ad.add(num);
}
ad.remove(new Integer(temp));//防止还有一个相同数被添加
for(int i = 0;i<ad.size();i++){
int index = ai.indexOf(ad.get(i));
System.out.println(as.get(index));
}
}
public static int xToten(int n,String str){
if(n==10)return Integer.parseInt(str);
char[] ch = str.toCharArray();
int sum = 0;
for(int i = ch.length - 1,j=0;i>=0;i--){
if(ch[i]>='0'&&ch[i]<='9')
sum+=(ch[i]-'0')*(int)Math.pow(n,j++);
else
sum+=(ch[i]-'A'+10)*(int)Math.pow(n,j++);
}
//System.out.println(sum);
return sum;
}
} 有没有大神指点一下,为啥我这个只能通过13.3%呢?这题map需要注意的是,在key不存在的时候可以自动创建
#include <iostream>
#include <map>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
int convertValue(int jinzhi, string value) {
if (jinzhi == 10) return stoi(value);
int i = 0;
for (int index = 0;index <value.size();++index) {
if ('0' <= value[index] && value[index] <= '9')
i = i*jinzhi + value[index] - '0';
else i = i*jinzhi + value[index] - 'A'+10;
}
return i;
}
struct data {
string str;
int value;
};
int main() {
string str,last="None";
cin >> str;
map<int,int> result;
vector<struct data> string_value;;
while (str != "END") {
int n = stoi(str.substr(0, str.find('#')));
string m = str.substr(str.find('#') + 1);
int va = convertValue(n, m);
struct data d = { str,va };
string_value.push_back(d);
++result[string_value.back().value];
cin >> str;
}
for (struct data i:string_value) {
if (result[i.value] == 1) {
last = i.str;
cout << last <<endl;
}
};
if (last == "None") {
cout << "None";
}
system("pause");
return 0;
}
#include <bits/stdc++.h> using namespace std; int F(int n, string m){ int s = 0; int l = m.length(); int p = 1; for(int i=0;i<l;i++){ char c = m[l-1-i]; if(c>='A') s += (10+c-'A')*p; else s +=(c-'0')*p; p *= n; } return s; } int main(){ string s; vector<pair<string,int>> S; unordered_map<int,int> M; int id = 0; while(cin>>s){ if(s=="END") break; int p = s.find('#'); string n_str = s.substr(0,p); string m = s.substr(p+1); int n = stoi(n_str); int x = F(n,m); S.push_back({s,x}); M[x]++; } int k = 0; bool isNone = true; for(int i=0;i<S.size();i++){ int x= S[i].second; if(M[x]==1){ cout<<S[i].first<<endl; isNone = false; } } if(isNone) cout<<"None"<<endl; return 0; }
#include <bits/stdc++.h>
using namespace std;
const int AtoN[] = {10,11,12,13,14,15};
int main()
{
string stmp,n="None";
vector<pair<string,int>> vp;
map<int,int> m;
while(cin >> stmp)
{
if(stmp=="END")
break;
int pos=stmp.find('#');
string stmp1=stmp.substr(0,pos);
string stmp2=stmp.substr(pos+1);
stringstream ss;
ss<<stmp1;
int jz;
ss>>jz;
int data=0;
for(int j=0;j<stmp2.size();j++)
{
if(stmp2[j]>='0'&&stmp2[j]<='9')
{
data*=jz;
data+=stmp2[j]-'0';
}
else
{
data*=jz;
data+= AtoN[stmp2[j]-'A'];
}
}
vp.push_back(make_pair(stmp,data));
m[vp.back().second]++;
}
for(int i=0;i<vp.size();i++)
{
if(m[vp[i].second]==1)
{
n=vp[i].first;
cout<<n<<endl;
}
}
if(n=="None")
cout<<n<<endl;
return 0;
}
""""
进制转换和数组计数
"""
import sys
from collections import Counter
if __name__ == "__main__":
# sys.stdin = open("input.txt", "r")
a, b = [], [] # a记录原字符串,b记录十进制的数值
while True:
s = input().strip()
if s == 'END':
break
a.append(s)
for c in a:
n, m = c.split('#')
b.append(int(m, int(n)))
dic = Counter(b)
ans = []
for i in range(len(b)):
if dic[b[i]] == 1:
ans.append(a[i])
if not ans:
print("None")
else:
print('\n'.join(ans))
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
class Pair {
String key;
int val;
Pair(String key, int val) {
this.key = key;
this.val = val;
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str;
//保存字符和其对应的十进制值的list集合
ArrayList<Pair> list = new ArrayList<>();
//对应的10进制的值和出现的次数
HashMap<Integer, Integer> map = new HashMap<>();
while (!(str = bf.readLine()).equals("END")) {
int value = getValue(str);
list.add(new Pair(str, value));
map.put(value, map.getOrDefault(value, 0) + 1);
}
boolean reslut = false;
for (int i = 0; i < list.size(); i++) {
if (map.get(list.get(i).val) == 1) {
reslut = true;
System.out.println(list.get(i).key);
}
}
if (!reslut) {
System.out.println("None");
}
}
//其他进制转10进制 注意 A表示10,B表示11....
private static int getValue(String s) {
String[] strs = s.split("#");
int x = Integer.parseInt(strs[0]);//进制数
int sum = 0;
for (int i = 0; i < strs[1].length(); i++) {
int n = strs[1].charAt(i) - '0';
if (n > 9) {
n = n - 7;
}
sum = sum * x + n;
}
return sum;
}
}
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为86.67%---多提交几次也能过,哈哈哈
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
Map<Integer,Integer> map = new LinkedHashMap<>();
Map<Integer,String> map1 = new HashMap<>();
while (scanner.hasNext()){
String str = scanner.nextLine();
if (str.equals("END")){
break;
}
String[] a = str.split("#");
int num = Integer.parseInt(a[1],Integer.parseInt(a[0]));
map1.put(num,str);
map.put(num, map.getOrDefault(num, 0)+1);
}
scanner.close();
int sign = 0;
for (int key: map.keySet()){
if(map.get(key) == 1){
sign = 1;
System.out.println(map1.get(key));
}
}
if(sign == 0){
System.out.println("None");
}
}
} 参考其他大佬的思路,进过修改,第一次也没通过93%
后面提交几次都通过
import java.util.*;
public class Main{
static class pair{
String key;
int val;
pair(String key, int val){
this.key = key;
this.val = val;
}
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
Map map = new HashMap();
ArrayList list = new ArrayList();
while (scanner.hasNext() ){
String str = scanner.nextLine();
if (str.equals("END")){
break;
}
String[] a = str.split("#");
String a1 = a[1];//数
int a0 = Integer.parseInt(a[0]);
int num = Integer.parseInt(a1,a0);
list.add(new pair(str, num));
map.put(num, map.getOrDefault(num, 0)+1);
}
int sign = 0;
for(int i = 0; i < list.size(); i++){
if(map.get(list.get(i).val) == 1){
sign = 1;
System.out.println(list.get(i).key);
}
}
if(map.size() == 0 || sign == 0){
System.out.println("None");
}
}
}
#include<bits/stdc++.h>
using namespace std;
//unordered_map<char,int> mp={{'A',10},{'B',11},{'C',12},{'D',13},{'E',14},{'F',15},{'G',16}};
int main()
{
string str;
vector<string> vec;
//unordered_set<string> S;
while(getline(cin,str) && str!="END")
{
vec.push_back(str);
}
vector<int> nums;
unordered_map<int,int> cnt;
for(auto & s:vec)
{
int pos=s.find("#",0);
int jz=stoi(s.substr(0,pos));
pos++;
//cout<<jz<<endl;
int res=0;
for(int i=pos;i<s.size();i++)
{
res+=pow(jz,s.size()-1-i)*(s[i]>='A'?(s[i]-'A'+10):(s[i]-'0'));
}
//cout<<res<<endl;
nums.push_back(res);
cnt[res]++;
}
bool flag=false;
for(int i=0;i<vec.size();i++)
{
if(cnt[nums[i]]==1)
{
cout<<vec[i]<<endl;
flag=true;
}
}
if(!flag) cout<<"None"<<endl;
return 0;
} #include<bits/stdc++.h>
using namespace std;
const int N = 100;
int f(char *num, int m) {
int ans = 0;
int n = strlen(num);
for (int i = 0,j = n - 1;j >= 0; ++i,--j) {
int k = 0;
if(num[j] >= 'A' && num[j] <= 'F')
k = 10 + num[j] - 'A';
else
k = num[j] - '0';
ans += k * ((int)pow(m, i));
}
return ans;
}
map<string, int> vis;
map<int, int> mark;
int main() {
char s[N];
vector<string> V;
while (cin >> s) {
if (strcmp(s, "END") == 0) break;
int n, m;
char num[N];
sscanf(s, "%d#%s", &m, num);
int k = f(num, m);
vis[s] = k;
mark[k]++;
V.push_back(s);
//cout<<s<<" = "<<k<<endl;
}
bool fg = true;
for (auto it : V) {
int k = vis[it];
if (mark[k] == 1) {
cout << it << endl;
fg = false;
}
}
if (fg) {
cout << "None" << endl;
}
return 0;
} import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
Map<Integer,Integer> map=new LinkedHashMap<>();
Map<Integer,String> map1=new HashMap<>();
while(sc.hasNext()){
String s=sc.next();
int flag=0;
if(s.equals("END")){
for(int key:map.keySet()){
if(map.get(key)==1){
flag=1;
System.out.println(map1.get(key));
}
}
if(flag==0)
System.out.println("None");
break;
}
String[] strs=s.split("#");
int n=Integer.parseInt(strs[0]);
int num=Integer.parseInt(strs[1],n);
if(map.containsKey(num)){
map.put(num,2);
}else{
map.put(num,1);
map1.put(num,s);
}
}
sc.close();
}
}
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = "";
HashMap<String, Integer> map = new HashMap<>(); //保存A-F的值
map.put("A",10);
map.put("B",11);
map.put("C",12);
map.put("D",13);
map.put("E",14);
map.put("F",15);
int sum = 0;
HashMap<Integer, String> map2 = new HashMap<>();
LinkedHashMap<Integer,Integer> map1 = new LinkedHashMap<>();
while (true){
str = sc.next();
if (str.equalsIgnoreCase("END")) break;
String[] split = str.split("#");
int n = Integer.parseInt(split[0]);
String s = split[1];
StringBuilder builder = new StringBuilder(s);
String s1 = builder.reverse().toString(); //反转字符串,方便求值
for (int i = 0; i < s1.length(); i++) {
String substring = s1.substring(i, i + 1);
if(map.get(substring) != null){
sum += map.get(substring) * Math.pow(n, i);
}
else {
sum += Integer.parseInt(substring) * Math.pow(n, i);
}
}
map1.put(sum,map1.get(sum)==null?1:map1.get(sum)+1);
map2.put(sum,str);
sum = 0;
}
int flag = 0;
for (Integer key: map1.keySet()){
if (map1.get(key) == 1){
flag = 1;
System.out.println(map2.get(key));
}
}
if (flag == 0){
System.out.println("None");
}
}
}
package nowcoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
List<String> list = new ArrayList<>();
int i = 0;
while (true) {
list.add(in.nextLine());
if ("END".equals(list.get(i))) break;
i++;
}
System.out.println(test.findDistincatNumber(list));
}
public String findDistincatNumber(List<String> list) {
int sys,num,reg1 = 0,reg2 = 0,dec = 0;
String r1 = "null",r2 = null;
for (String s : list) {
if ("END".equals(s)) break;
sys = Integer.valueOf(s.split("#")[0]);
num = Integer.valueOf(s.split("#")[1]);
dec = 0;
int index = 1;
while (num != 0) {
dec = (num % 10) * index + dec;
index *= sys;
num /= 10;
}
if (reg1 != 0 && reg2 != 0) return dec == reg1 ? r2 : r1;
if (reg1 == 0 || reg1 == dec) {
reg1 = dec;
r1 = s;
continue;
}
if (reg2 == 0) {
reg2 = dec;
r2 = s;
continue;
}
}
return "None";
}
} #include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <limits.h>
#include <unordered_map>
using namespace std;
void findDifferentValue() {
int i;
string s;
vector<string> vec;
vector<pair<string, int>> res;
unordered_map<int, int> mp;
while (getline(cin, s)) {
if (s != "END") {
int pos = s.find("#");
string front = s.substr(0, pos);
string back = s.substr(pos + 1);
int buf = stoi(front);
int x = stoi(back, nullptr, buf);
//int x = trans(buf, back);
res.push_back({ s, x });
mp[x]++;
}
else {
break;
}
}
bool isNone = true;
for (int i = 0; i < res.size(); i++) {
int x = res[i].second;
if (mp[x] == 1) {
cout << res[i].first << endl;
isNone = false;
}
}
if (isNone) {
cout << "None" << endl;
}
}
int main(){
findDifferentValue();
return 0;
}
#include<iostream>
#include<cstdlib>
#include<map>
#include<vector>
#include<string>
using namespace std;
int shift(string a, string b) //int 最大值是4打头的十位数,返回为int类型可满足题意
{
int c = atoi(a.c_str()); //不把d转成int类型的原因是,c进制的value数位可能超过十;atoi的参数为字符数组类型,所以用c_str()转一下
int d = b.length();
int ret = 0, mul = 1;
int i = d-1;
while(i>=0)
{
int temp = b[i]-48; //这里是做好value数位出现A-F和0-9的分支匹配
if(b[i]<'0' || b[i]>'9')
{
temp = 10+b[i]-'A';
}
ret+=(temp)*mul;
i--;
mul*=c;
}
return ret;
}
int main()
{
map<int, int> mp;
vector<string> str;
vector<int> vec;
string index, value, temp;
while(cin>>temp)
{
if(temp=="END")
break;
int p = temp.find('#');
index = temp.substr(0, p);
value = temp.substr(p+1);
str.push_back(temp);
vec.push_back(shift(index,value));
}
int k = vec.size();
for(int i = 0; i < k; ++i)
mp[vec[i]]++;
int tag = 0;
for(int i = 0; i < k; ++i)
{
if(mp[vec[i]]==1)
{
cout<<str[i]<<endl;
tag = 1;
}
}
if(tag==0) //这里做好无异数的返回提示
cout<<"None";
return 0;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line="";
StringBuilder sb=new StringBuilder();
while((line=br.readLine())!=null&&(!("END".equals(line)))){
sb.append(",");
sb.append(line);
}
String input=sb.toString();
Map<Double,Integer> map=new LinkedHashMap<>();
if(!(input.isEmpty())&&input.startsWith(",")){
String[] inputArr=input.substring(1).split(",");
Set<Integer> set=new HashSet<>();
for(int k=0;k<inputArr.length;k++){
String[] sArr=inputArr[k].split("#");
double num=Double.parseDouble(sArr[0]);
byte[] b=sArr[1].getBytes();
double[] newB=new double[b.length];
for(int i=0;i<b.length;i++){
char bChar=(char)b[i];
if(bChar>='A'&&bChar<='F'){
newB[i]=(char)b[i]-'0'-7;
}else{
newB[i]=(char)b[i]-'0';
}
}
double result=0.0d;
if(10!=num){
int index=newB.length-1;
for(int j=0;j<newB.length;j++){
result=result+newB[j]*Math.pow(num,index);
index--;
}
}else{
result=Double.parseDouble(sArr[1]);
}
if(map.get(result)!=null){
set.add(map.get(result));
set.add(k);
}else{
map.put(result,k);
}
}
for(int i=0;i<inputArr.length;i++){
if(!set.contains(i)){
System.out.println(inputArr[i]);
}
}
if(set.size()==inputArr.length){
System.out.println("None");
}
}
}
}
import sys
def num(s):
s = s.split('#')
base,n = int(s[0]),s[1][::-1]
number = 0
for i in range(len(n)):
if n[i].isdigit():
number += (base**(i))*int(n[i])
else:
temp = ord(n[i])-ord('A')+10
number += (base**(i))*temp
return number
def answer(res):
dic = {}
ans = []
for i in range(len(res)):
tem = num(res[i])
ans.append(tem)
if tem in dic:
dic[tem].append(i)
else:
dic[tem] = [i]
found = False
for i in range(len(ans)):
if len(dic[ans[i]])==1:
found = True
print(res[i])
if not found:
print('None')
if __name__=='__main__':
res = []
for line in sys.stdin.readlines():
s = line.strip()
if s=='END':
break
res.append(s)
answer(res)
#include<bits/stdc++.h>
using namespace std;
// 定义结构体变量
typedef struct Ti{
// 原始字符串
string s;
// 字符串序号
int id;
// 其转化为10进制的值
int value;
}T;
// 统一为10进制
int compute(int m,string s)
{
int res = 0;
int l = s.size();
for(int i=0;i<l;i++)
{
if(s[i]>='0'&&s[i]<='9')
{
res += int(pow(m,l-i-1))*(s[i]-'0');
}
else{
res+= int(pow(m,l-i-1))*(s[i]-'A'+10);
}
}
return res;
}
bool cmp1(T t1,T t2)
{
return t1.value<t2.value;
}
bool cmp2(T t1,T t2)
{
return t1.id<t2.id;
}
int main()
{
vector<T>v;
string str;
// priority_queue<T,vector<T>,cmp> Q;
vector<T>ans;
int i = 0;
while(cin>>str&&str!="END")
{
T t;
t.s = str;
t.id = i;
int pos = str.find('#');
// 取得是几进制
string jinzhi = str.substr(0,pos);
int base = stoi(jinzhi);
// 该进制下的数值表示
string temp = str.substr(pos+1);
// 转换
t.value = compute(base,temp);
v.push_back(t);
i++;
}
if(v.size()==1) {
cout<<v[0].s<<endl;
return 0;
}
sort(v.begin(),v.end(),cmp1);
if(v[0].value!=v[1].value)
ans.push_back(v[0]);
if(v[v.size()-1].value!=v[v.size()-2].value)
ans.push_back(v[v.size()-1]);
for(int i=1;i<v.size()-1;i++)
{
if(v[i].value!=v[i-1].value&&v[i].value!=v[i+1].value)
ans.push_back(v[i]);
}
if(ans.size()==0) { cout<<"None"<<endl; return 0;}
sort(ans.begin(),ans.end(),cmp2);
for(int i=0;i<ans.size();i++)
cout<<ans[i].s<<endl;
return 0;
}