输入包含两行:
第一行有一个整数n(1 ≤ n ≤ 100000),表示数组数字个数n,个数满足题意。 第二行为n个整数,范围均在32位整数,以空格分隔,保证输入数据合法
出现一次的那个数字
7 1 2 2 2 3 3 3
1
import sys n=int(sys.stdin.readline()) s=list(map(int,sys.stdin.readline().strip().split())) see_once,see_twice=0,0 for i in s: see_once=~see_twice & (see_once^i) see_twice=~see_once & (see_twice^i) print( see_once)
import sys n=int(sys.stdin.readline()) s=list(map(int,sys.stdin.readline().strip().split())) print(3*sum(set(s))-sum(s))//2
import java.util.*; public class Main{ public static void main(String []args){ Scanner sc=new Scanner(System.in); int len=Integer.parseInt(sc.nextLine()); String [] strs=sc.nextLine().split(" "); int [] nums=new int[len]; for(int i=0;i<len;i++){ nums[i]=Integer.parseInt(strs[i]); } Arrays.sort(nums); for(int i=0;i<len;i+=3){ if(i==len-1){ System.out.println(nums[i]); System.exit(0); } int a=nums[i]; int b=nums[i+1]; if(a!=b){ System.out.println(a); System.exit(0); } } } }
#include <iostream> #include <math.h> using namespace std; int main() { int n, x, it, a[32] = { 0 },c , b = 0, res = 0; cin >> n; for (int i = 0; i < n; i++) { cin >> x; it = 31; while (x) { c = x % 3; a[it--] += c; b = x / 3; x = b; } } for (int i = 31; i >= 0; i--) { res += (a[i] % 3)* pow(3, 31 - i); } cout << res << endl; return 0; }
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int n; cin>>n; vector<int> a(n,0); for(int i=0;i<n;++i) cin>>a[i]; sort(a.begin(),a.end()); int cnt=1; for(int i=1;i<n;++i) { if(cnt==1&&a[i]!=a[i-1]) { cout<<a[i-1]<<endl; return 0; } if(a[i]==a[i-1]) cnt+=1; else cnt=1; } return 0; }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[] a=new int[n]; int sum=0; for(int i=0;i<n;i++){ a[i]=sc.nextInt(); } int x=0; for(int i=0;i<32;i++){//查看32个位置上面的数字为1的个数是否是3的倍数多1 int bit=1<<i; int count=0; for(int j=0;j<n;j++){ if((bit&a[j])!=0) count++; } if(count%3==1)//代表单独出现的那个数字在 1<<i这个位置上有出现1,故将其相加 x=x|bit; } System.out.println(x); } }