输入数值序列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; }