一个简单有趣的题(4个变量找出取走的数)

题目:

读入10000000(10^7)个无符号32位整数,从中取走一个。告诉你剩下的9999999个整数。找出取走了哪一个。

要求:

代码最多只能用4个无符号32位整型变量。

解法:

异或运算满足交换率。

故有:a = a^(b^b)^(c^c)^....^(d^d)  =  (a^b^c^....^d)^(b^c^....^d)

代码:

int main(){
    unsigned int i,a,b,c;
    b = c = 0;
    for(i=1;i<=10000000;++i){
        scanf("%u",&a);
        b = b ^ a;
    }
    for(i=1;i<=9999999;++i){
        scanf("%u",&a);
        c = c ^ a;
    }
    printf("%u",b^c);
}
时间: 2024-10-11 01:33:56

一个简单有趣的题(4个变量找出取走的数)的相关文章

一个简单有趣的SQL存储过程——个人财务管理

刚开始学习存储过程的小白,网上看完语法后一般都会想实践一下,但往往又不知道该写个什么样的存储过程来练手,以下就提供一个简单有趣.用来查询每月个人财务状况的存储过程. 一.建表 首先需要建一张事实表,用来记录每月重要的支出,包括支出的类型.费用.付款方式.每月付款时间.首次分期还贷时间.最后分期还贷时间(还完的时间).用途.支出大类...不一定会都用到,也可以根据实际情况做相应的增减,以下仅提供一个例子. CREATE TABLE [dbo].[Fact_CostType] ( [CostType

剑指Offer(Java版)第六十七题:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口, 他们的最大值分别为{4,4,6,6,6,5}。

/*给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}: 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4

面试算法题:16个数,最多用20次比较,找出第二大的数?

这道题最笨的方法就是先从16个数中选出最大的数,然后再从剩下的15个数中选出最大数就可得到答案,因此,需要15+14=29次比较. 既然这道题要求在20次比较之内就能找出第二大的数,那我们就想能简单的方法. 假设16个数中最大的是A,第二大的是B. 首先将16个数两两进行比较,较大者胜出,然后再在胜出者中进行两两比较,按此方法,最后选出最大数A,如下所示 红色路线是最大数经过的路径. 接下来分析B可能存在的位置. 将16个数分为左部分和右部分各8位: 1.如果A和B在两个不同的部分(A在左部分,

一个简单的公式——求小于N且与N互质的数的和

首先看一个简单的东西. 若gcd(i,n)=1,则有gcd(n-i,n)=1. 于是在小于N且与N互质的数中,i与n-i总是成对存在,且相加等于n. 考虑i=n-i的特殊情况,此时n=2*i,由gcd(i,n)=1,得n=2.此时手动计算ans=1. 因为小于N且与N互质的数的个数为φ(n),于是我们可以得出公式ans=n*φ(n)/2.

偶然看到的面试算法题_最短时间找出十包粉末中的两蓝粉末。

题目:有4个杯子,10包粉末,其中有2包溶于水变蓝,其余无色,粉末溶于水2min才能显现颜色.求找出两包蓝色粉末的最短时间.假设水和粉末用不完. 解:以下给出四种解法,标记10包粉末为(1,2 ... ) 杯子为[1,2,3,4]首先我想会不会是有某种算法,dp 二分..@[email protected]..没有,懵懵的. 法一:这是我最初想到的比较傻的方法 第一趟:[12,34,56,78] 每个杯子分别放两包加水融化,剩下两包不管.可能的情况: (1)0个杯子变色,说明剩下两包就是蓝粉末

一个简单有趣的证明题

最近上算法课,老师讲了一个有趣的证明题. 平面上一个有n个点的有限点集A.具有如下性质:任意两个点x,y所决定的直线上都能找到第三个点z.试证明A中的所有点在同一直线上. 对于证明题来说,最常用而系统的方法无非就两种:归纳法和反证法.其他的诸如综合法和分析法都与具体问题关系较大.如果解决证明题一时没有思路,这两种方法将是不错的选择.下面将尝试用这两种方法解决这个题目. 一,归纳法. 相信学过高中数学的人,没有人不知道这个大名鼎鼎,而又简单有效的证明方法.这里就不再赘述.下面给出一个证明过程. (

Android用SurfaceView写一个简单有趣的游戏--《数字组合》之一

最近突然有了一个想法--做一款android的简单游戏练练手,既要实现起来简单(毕竟只有一个人,框架什么的暂且就不用考虑了),又要能够达到对android知识框架的复习和游戏要有可玩性,终于用了几个星期写完了.和大家分享分享体会吧. 本来打算写一个专栏的.看以后的时间吧. 首先介绍一下游戏的主要思想和SurfaceView也就是游戏主界面的代码分享,后续部分再更新吧. 在点击 开始游戏 后,进行组合数字的选择,根据难易程度系统默认选择2和8,选择界面中间显示选择的组合数字,第一个数字表示第一个组

Android 分享一个简单有趣的动画效果

本期开始于大家分享几个简单又有趣的动画 效果图: 效果还是不错的,而实现起来也并没有多大的难度,上代码喽 public int id[] = { R.drawable.fengjing_1, R.drawable.fengjing_2, R.drawable.fengjing_3, R.drawable.fengjing_4, R.drawable.fengjing_5, R.drawable.fengjing_6 }; public String list[] = { "一", &q

碰到的一个简单的算法题,关于两个字符串word1和word2,判断word1能不能只通过删除字符就能够得到word1.

这是我写的一个解法,大概思路是说.首先判断如果word2的长度大于word1则直接返回false,负责继续执行. 我们判断在word2中的每一个字符在word1中出现的位置,如果刚好符合word1中的全部或者部分字符的组成顺序那么就符合返回true. 具体的代码实现如下: static boolean isTrans(String word1,String word2){ if(word2==null || word2.length()==0) return true; if(word1 ==