• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
HaibaraAi
博客园    首页    新随笔    联系   管理    订阅  订阅

有一个数字出现1次,其它都出现3次

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
#include <cmath>

using namespace std;
#define N 1005
int a[N];
int b[N];
int cnt = 0;
int n;
int main() {
	cin >> n;
	int s = 0;
	for (int i = 0; i < n; i++) {
		cnt = 0;
		cin >> a[i];
		int x = a[i];
		while (x) {
			b[cnt] += x % 3;
			b[cnt] %= 3;
			cnt++;
			x /= 3;
		}
	}
	int d = 1;
	for (int i = 0; i < 20; i++) {
		s += b[i] * d;
		d *= 3;
	}
	printf("%d\n", s);
	return 0;
}

与两次的类似,两次的直接对每个数异或就行了,本质也是消掉2次重复的,3次换成3进制,每一位*3%3肯定等于0,所以影响为0 就只剩下 出现一次的数字了

posted @ 2016-10-12 12:37  HaibaraAi  阅读(326)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3