数中专题

不用”if“,”?:“,”switch“或其他判断语句,求两个数中较大的数或较小的数

以下五种方法分别求出较大的数和较小的数的方法。较小数的代码在注释中,但未运行测试。 int Find1(int a, int b) {return ((a + b) + abs(a - b)) / 2;//return ((a + b) - abs(a - b)) / 2;}/*当a大于b时,a-b为正,右移sizeof(int) * 8 - 1后,最右侧一位为0,0^1 = 0;当a

【C语言笔记】【宏定义系列】 两个数中的最小值

【C语言笔记】【linux宏定义系列】 两个数中的最小值 min linux宏定义系列内容。用于记录在linux kernel之中各式各样的宏定义☺。 宏定义说明 用于得到两个数中数值的最小值。例如 a = 25 a=25 a=25, b = 18 b=18 b=18,会返回得到18。 这个宏会进行严格的类型检查。 该宏定义来自linux kernel 3.10。 实现代码 #def

编程之美 2.1 求二进制数中1的个数

假设有数n 以前用除二取余法 复杂度logn 不多说 有一个logv的方法 v为1的个数 复杂度比logn小   int Count(int x){int ans = 0;while(x){x &= (x-1);ans++;}return ans;} 这里用到了位运算  x&(x-1)每次去掉一个1 举个例子  100010001000&(100010001000-1) = 1

有两个变量a和b,不用“if”、“? :”、“switch”或其他判断语句,找出两个数中比较大的

1、问题 There are two int variables: a and b, don't use "if"、"? :"、"switch" or other judgement statement, find out the biggest one of the two numbers. (有两个变量a和b,不用“if”、“? :”、“switch”或其他判断语句,找出两个数中比较大的

JAVA——实现三元表达式获取键盘录入的三个数中的最大值

题目:键盘录入三个数,用三元运算符获取其中的最大值。 代码如下: Scanner sc = new Scanner(System.in);System.out.println("请输入第一个数:");int a = sc.nextInt();System.out.println("请输入第二个数:");int b = sc.nextInt();System.ou

用java实现分数各种运算(加减乘除,求余,求幂,求两个数中的较大值,较小值)

用java实现分数各种运算(加减乘除,求余,求幂,求两个数中的较大值,较小值) 1,要求      用户以分数形式输入,以分数形式输出,用java语言实现分数中的各种运算(加减乘除,求余,求幂,求两个数中的较大值,较小值) 2,java代码(+详细注释)       2.1 代码 package Rational;import

三个数是唯一出现的,其余的都出现偶数个,找出这三个数中。

题目:一个数组里,除了三个数是唯一出现的,其余的都出现偶数个,找出这三个数中。 比如数组元素为[1,1,2,2,3,3,4,5,6],只有4,5,6这三个数字是唯一出现的,我们只需要输出4,5,6中的一个就行。 思路: 1.这个数组元素个数一定为奇数  假如有103个数,则有50对数,加上三个不同的数,则这三个和50对中的任何一个都不同。 2.因为3个数不相同, 三个数一定不

求二进制数中1的个数常用的一种方法

int BitCount(int n){int count = 0;while (n){count ++;n &= n-1; // 去年二进制中末位的1}return count;}

整数的二进制数中1的数目,1-N中1的总共个数,如何判断一个数是否为2的整数次幂.

①题目:输入一个整数,求该整数的二进制表达中有多少个1。 例如输入10,由于其二进制表示为1010,有两个1,因此输出2。 分析:这是一道很基括微本的考查位运算的面试题。包软在内的很多公司都曾采用过这道题。 一个很基本的想法是,我们先判断整数的最右边一位是不是1。接着把整数右移一位,原来处于右边第二位的数字现在被移到第一位了,再判断是不是1。这样每次移动一位,直到这个整数变成0为止。现在的问

#define获取三个数中最大最小值

意外看到一个宏定义,记录一下: #define clamp(value, minValue, maxValue)        ((value)<(minValue)?(minValue):((value)>(maxValue)?(maxValue):(value))) 这是一个宏,获取value min max中间值的方法。   由此想到面试时候遇到题目,顺便写一下: 1. 获取val

第16关 判断三个数中的最大数

立即学习:C语言编程入门100题-16-第16关 判断三个数中的最大数-WangTeacher的在线视频教程-CSDN程序员研修院 #include<stdio.h>int main() {int a[3] = {0};int max = 0;int i = 0;printf("Please input three int: ");for (i = 0; i < sizeof(a)/sizeof

输出三个数中的最大值

#include<stdio.h>int main(){int a,b,c;printf("请分别输入3个数的值");scanf("%d%d%d",&a,&b,&c);printf("a is %d,b is %d,c is %d\n",a,b,c);/*int max=a;if(max<b);max=b;if(max<c)max=c;printf("三个数中的最大值为%d \n",max);*

编程之美之二进制数中1的个数

问题: 对于一个字节(8bit)的变量,求其二进制中1的个数,要求算法的执行效率尽可能的高。 例如把9表示成二进制是1001,有2位是1,因此如果输入9,1的个数为2。 解法一: 可以举一个8位二进制的例子。对于二进制操纵,我们除以一个2,原来数字就会减少一个0(向右移一位)。如果除的过程中有余,那么久表示当前位置有一个1。 以10100010为例: 第一次除以2时

计算1到N的十进制数中1的出现次数

转自:http://hi.baidu.com/zhaoshengjin/blog/item/f1df6618cb1debbe4bedbc5d.html 问题描述:给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有"1"的个数。例如: N = 2,写下1,2。这样只出现了1个"1"。 N = 12,写下1,2,……,12,这样有5个"1"。 写一个函数f(N),返回

从一列数中筛除尽可能少的数,使得从左往右看这些数是从小到大再从大到小

问题:从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。 解法:这是双端 LIS 问题,用 DP 的思想可解,目标规划函数 max{ b[i] + c[i] }, 其中 b[i] 为从左到右, 0 ~ i 个数之间满足递增的数字个数; c[i] 为从右到左, n-1 ~ i 个数之间满足递增的数字个数。最后结果为 n - max + 1。其中 DP 的时候,可以维护

判断二进制数中1的个数

public class TestYihuo {     /**      * 判断二进制数中1的个数      * @param args      */     public static void main(String[] args) {         /*int a = 0xaf;         int b = 0xb1;         System.out.println(a^b

【4.15】求二进制数中1的个数【每日一题】

【4.15】求二进制中1的个数。例如,10=1010,1的个数为2。【每日一题】 此题主要考查位运算,当然不会用位运算的人可能会这么写: 1.可能是最笨的方法了 int numOfOne(unsigned num) {int count = 0;while (num) {count += num % 2;num /= 2;}return count;} 使用位运算的原

三目运算符求三个数中最大、最小、中间值

c中只有一个三目运算符,也就是说看完我这篇博客就把c中所有的三目运算符都掌握了,哈哈  公式:表达式1>表达式2?表达式3:表达式4     a>b?a:b   等价于: if(a>b)return a;else if(a<b)return b; 表达式3和表达式4可以是任何东西。如:a>b?5:6 也是可以的  上面的内容掌握后,下面用三目运算符求最大最小就很容易够以理解

不用任何比较判断找出两个数中的最大值

题目: 给定两个32位整数a和b,返回a和b中较大的一个,要求不能使用比较判断 思路一 : 判断a-b的符号,sign(int n) 函数实现 n为正数返回1,n为负数返回0。return a*scA + b*scB,就是根据a-b的值,选择要么返回a,要么返回b。 import java.util.*;class Main{public static void main(String[

数据结构与算法:异或的妙用(找出一堆数中唯一/唯二出现奇数次的项、swap的优化)

异或的本质是相同为0,不同为1,实际上也就是无进位加法。 那么对于任何数x和y,以下公式永远成立 x^0=xx^x=0(x^y)^x=x^(y^x)=(x^x)^y=0^y=y//交换律和结合律 也就是说一堆数里面,出现偶数次的项先自己异或,那么就会得0,然后再和出现奇数次的项进行异或,那么最终结果就是自己本身。 找出一堆数中唯一/唯二出现奇数次的项 找出一堆数中唯一出现奇数次的项

打印斐波那契数列的前三十个数中所有的质数,并统计个数

#include <stdio.h>#include <math.h>int count=0;//前三十个数中所有的质数统计个数 //判断是否为质数void judge(int s){long tmp = sqrt(s)+1;int i;for(i=2;i<tmp;i++){if(s%i==0){return;}}printf("%d ",s);count++;} int main(){i

输入一个整数,再从输入的一组数中找出输入的整数出现的次数和位置。

输入一个整数,再从输入的一组数中找出输入的整数出现的次数和位置。 #include <stdio.h>int main(){int n,t,i=0,j=0,count=0;//count表示出现的次数int index[100]; //记录出现的下标 char c;printf("请输入一个整数n(即为要查找的数) ");printf("同时请输入一组数,请以换行符结束:\n"); scanf

证明:偶数长度的回文数中只有11是素数

说明 回文数有两种 一种是单数位数,abcba,一种是双数位数,abccba 其中双数位数是质数的只有11 证明 举例: abc……cba a * 100……001 b * 10……01 c * 1……1 其中 1……1 是能被11整除,其中省略号中只要2个0 参考博客:https://bbs.csdn.net/topics/392318549

C语言——写一个简单函数,找两个数中最大者

#include <stdio.h>int max( int a, int b ){return a>b ? a:b;}int main(){ int a, b;printf("输入两个数:\n");scanf("%d %d", &a, &b);printf("max = %d\n", max(a, b));return 0;} 输出结果:

6-1 找两个数中最大者 (10分)

int max( int a, int b ){int t=0;if(a<=b){t=b;}else{t=a;}return t;}