九度oj 题目1256:找出两个只出现了一次的数字
- 题目描述:
 - 
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
 
- 输入:
 - 
输入的第一行包括一个整数N(1<=N<=1000)。
接下来的一行包括N个整数。 
- 输出:
 - 
可能有多组测试数据,对于每组数据,
找出这个数组中的两个只出现了一次的数字。
输出的数字的顺序为从小到大。 
- 样例输入:
 - 
6
2 3 9 3 7 2 
- 样例输出:
 - 
7 9 (题目中的条件 N 应该大于1)
开始的想法是先排序,然后再去数数,代码如下#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm> int cmp(const void *a, const void *b) {
int at = *(int *)a;
int bt = *(int *)b;
return at-bt;
} int n;
int tmp[]; int main(int argc, char const *argv[])
{
while(scanf("%d",&n) != EOF) {
for(int i = ; i < n; i++) {
scanf("%d",&tmp[i]);
}
qsort(tmp,n,sizeof(int),cmp);
int i = ;
int cnt = ;
int ans1 = , ans2 = ;
while(i < n) {
if((i == n-) || tmp[i] != tmp[i+]) {
if(cnt == ) {
ans1 = tmp[i];
cnt++;
} else {
ans2 = tmp[i];
cnt++;
break;
} i++; }
else {
i += ;
}
}
printf("%d %d\n",ans1, ans2); }
return ;
}虽然通过了,但耗时较长,几乎已达上限
之后改成用异或的方法来做
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm> int n;
int tmp[]; int main(int argc, char const *argv[])
{
int yi = ;
while(scanf("%d",&n) != EOF) {
yi = ;
for(int i = ; i < n; i++) {
scanf("%d",&tmp[i]);
yi = yi ^ tmp[i];
}
int cnt = ;
while((yi & ) == ) {
yi = yi >> ;
cnt++;
}
int ans1 = , ans2 = ;
for(int i = ; i < n; i++) {
int ct = ;
int p = (tmp[i] >> cnt)&;
if(p == ) {
ans1 = ans1 ^ tmp[i];
}
else {
ans2 = ans2 ^ tmp[i];
}
}
if(ans1 > ans2) {
int temp = ans1;
ans1 = ans2;
ans2 = temp;
}
printf("%d %d\n",ans1,ans2);
}
return ;
}所有的异或后为那两个数异或的结果,再按该结果对原数据进行分组,将两个数分到不同的组内,再进行异或就会得出两个数。
 
九度oj 题目1256:找出两个只出现了一次的数字的更多相关文章
- 九度OJ 1256:找出两个只出现了一次的数字 (位运算)
		
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:568 解决:186 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 输入的 ...
 - 九度oj 题目1472:求两个多项式的和
		
题目描述: 输入两个多项式,计算它们的和. 每个多项式有若干对整数表示,每组整数中,第一个整数表示系数(非0),第二个整数表示该项的次数. 如由3 3 5 -2 1 4 0表示3x^5 - 2 * x ...
 - 九度OJ 1035:找出直系亲属 (二叉树、递归)
		
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2380 解决:934 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外) ...
 - 九度oj  1407 快速找出最小数
		
原题链接:http://ac.jobdu.com/problem.php?pid=1407 线段树,区间更新,查询区间最小值. 注意区间更新,查询的时候,区间$\begin{align*}[L,R] ...
 - hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
		
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
 - 九度oj题目&吉大考研11年机试题全解
		
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
 - 九度oj 题目1007:奥运排序问题
		
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
 - 九度OJ 题目1384:二维数组中的查找
		
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
 - 九度OJ题目1105:字符串的反码
		
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
 
随机推荐
- 【extjs6学习笔记】0.1 准备:基础概念 (01)
			
1. Ext.application 应用程序入口点 2. Ext.onReady() 页面加载完成后触发动作 3. Ext.define() 4. Ext.data.proxy.Proxy 5. E ...
 - SVN中trunk,branches,tags用法详解【转】
			
Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...
 - show processlist使用介绍
			
这个命令中最关键的就是state列,mysql列出的状态主要有以下几种: Checking table 正在检查数据表(这是自动的).Closing tables 正在将表中修改的数据刷新到磁盘中,同 ...
 - 关键字: on
			
关键字: on 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成 ...
 - 手把手教你打造一个 Mac 风格的 Windows10(手动滑稽)
			
Mark https://www.sqlsec.com/2018/04/winmac.html 大佬写得很好,资瓷!! MyDock可能不是最新的,给出官方维护的网盘:https://pan.bai ...
 - webpack 使用流程
			
webpack loader 读文件的 脚手架 vue-cli: 自动化的小工具,帮咱们把项目的架子搭起来 -------------------------------------- 开发环境 n ...
 - grep, egrep, fgrep - 打印匹配给定模式的行
			
总览 SYNOPSIS grep [options] PATTERN [FILE...] grep [options] [-e PATTERN | -f FILE] [FILE...] 描述 DESC ...
 - 92.背包问题(lintcode)
			
注意j-A[i-1]必须大于等于0,只大于0会报错 class Solution { public: /** * @param m: An integer m denotes the size of ...
 - SpringBoot整合Thymeleaf
			
一个整合Thymeleaf与Mybatis的CRUD例子 整合Mybatis例子 一.添加maven依赖 <dependency> <groupId>org.springfra ...
 - TCP/IP各种数据包结构体
			
下面这些TCP/IP数据包是我在进行Socket及Wipcap网络编程过程中曾经用到过的数据包结构体, 这些东西平时看起来不起眼,真正用到的时候就会觉得非常有用...... 以太帧头格式结构体,共14 ...