精华内容
下载资源
问答
  • 接下来M行,每行包括3整数A,B,C(1,B,1),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。 输入保证至少存在1条商店到赛场的路线。 Output 对于每组输入,输出一行,表示...
  • 懒得写解题思路了。直接上代码。 public class Test1 { public static void main(String[] args) { ... System.out.print("输入一个数字:"); int c = sc.nextInt();; int size = (c+1)/2; ...

    在这里插入图片描述
    懒得写解题思路了。直接上代码。

    
    public class Test1 {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		System.out.print("输入一个数字:");
    		int c = sc.nextInt();;
    		int size = (c+1)/2;
    		int[][] array = new int[size][size+1];
    		int[] strWidth = new int[size+1];
    		//先给中心列赋值:1,3,5,7,9
    		for (int i = 0,j=size; i < size; i++,j--) {
    			array[i][j] = i*2+1;
    			array[size-1-i][size-j] = i*2+1;
    		}
    		int max = 0; //用来存放一列最大的数字,计算该列应占多宽
    		max = array[size-1][0];
    		strWidth[size] = (""+max).length();
    		//从中心列开始往两边计算
    		for (int k = 1; k <= size; k++) {
    			max = 0;
    			for (int i = k-1,j=size; i < size-1; i++,j--) {
    				//计算中心列右边的值
    				array[i+1][j]=array[i][j] + array[i+1][j-1];
    				//计算中心列左边的值
    				array[size-i-2][size-j]=array[i][j] + array[i+1][j-1];
    			}
    			max = array[0][size-k];
    			strWidth[size-k] = (""+max).length(); //取该列最大的数字所占的宽度
    		}
    		printArray(array,strWidth);
    	}
    
    	//打印空格
    	public static void printSpace(int len){
    		for (int i = 0; i <= len; i++) {
    			System.out.print(" ");
    		}
    	}
    	//打印数组每一列的宽度取该列的最大值
    	public static void printArray(int[][] array,int[] strWidth){
    		//int size = (""+array[0][0]).toString().length();//计算出最大的数字长度
    		for (int i = 0; i < array.length; i++) {
    			
    			//打印每行之前,先打印空位
    			for (int j = 0; j < i; j++) {
    				printSpace(strWidth[j]);
    			}
    			for (int j = 0; j < array[i].length; j++) {
    				int index = j+i;//下标用来取该列宽度。
    				if(index>=strWidth.length-1) //如果到中间列了,需要改变方向5,4,3,2,1
    					index = strWidth.length -Math.abs(strWidth.length-index-3);//根据index值计算改变方向后的下标
    				printNumber(array[i][j],strWidth[index]);//array[i][j]
    			}
    			System.out.println();
    		}
    	}
    
    	//格式化打印数字,按最大的数字所占的位数打印
    	public static void printNumber(int num,int size){
    		int len = (""+num).toString().length();
    		for (; len <= size; len++) {
    			System.out.print(" ");
    		}
    		System.out.print(num);
    	}
    }
    
    展开全文
  • 每锁匙至少有3不同的深度且至少有1对相连的槽其深度之差为3。求这样的锁匙的总数。 Input 本题无输入 Output 对N>=2且N,输出满足要求的锁匙的总数。 Sample Output N=2: 0 N=3: 8 N=4: 64...
  • 一个笼子里面关了鸡和兔子(鸡有2 只脚,兔子有4 只脚,没有例外)。已经知道了笼 子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物 输入数据 第1 行是测试数据的组数n,后面跟着n 行输入。每组...

    好久没有写算法了,写算法都手生了,这可不利于找工作呀,打算坚持每周看一下算法方面的相关知识。今天是第一次,所以就入门一下吧,看了一下鸡兔同笼的问题。问题如下:

    问题描述

    一个笼子里面关了鸡和兔子(鸡有2 只脚,兔子有4 只脚,没有例外)。已经知道了笼

    子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物

    输入数据

    第1 行是测试数据的组数n,后面跟着n 行输入。每组测试数据占1 行,包括一个正整

    数a (a < 32768)。

    输出要求

    n 行,每行输出对应一个输入。输出是两个正整数,第一个是最少的动物数,第二个是

    最多的动物数,两个正整数用空格分开。如果没有满足要求的情况出现,则输出2 个0。

    输入样例

    2

    3

    20

    输出样例

    0 0

    5 10

    题很简单,所以很快就写出了代码,如下: 

    #include <iostream>
    
    int main(){
    	int cnt; 
    	std::cin>>cnt;
    	for(int i=0;i<cnt;++i){
    		int legCnt = 0;
    		std::cin>>legCnt;
    		if(legCnt & 0x1){
    			std::cout <<0 <<" "<<0<<std::endl;
    		}else{
    			int cntMin= legCnt>>2 + legCnt&0x2 ? 1 :0;
    			int cntMax = legCnt>>1;
    			std::cout << cntMin<<" " << cntMax<<std::endl;
    		}
    	}
    }

     运行了一下,结果竟然有问题,输入20时,输出时0 10,第一个最小的动物数明显计算有误,然后仔细看了一下代码, 问题出在一下语句中: 

    int cntMin= legCnt>>2 + legCnt&0x2 ? 1 :0;

    其实逻辑很简单,最小的动物数应该时除以4,如果还剩2条腿,则在加一。理论上是没有问题的,但是上面的语句就是输出有误。然后改动如下就可以了

    int cntMin= (legCnt>>2) + ((legCnt&0x2) ? 1 :0);

     可以看出是由于运算符号的优先级引起的问题,然后又温了一下书: 

    在C/C++中,上面语句中涉及的运算符有 >> , + , & 和 ? : 四个,这四个的优先级从高到低依次为:

    +,  >>, & , ? : 

    这样,int cntMin= legCnt>>2 + legCnt&0x2 ? 1 :0;就被编译成一下运算顺序

    int cntMin = ((legCnt>>(2+legCnt))&0x2)? 1 : 0;

    所以才会得出20个腿算出的 最小可能动物数是 0。

    其实问题很简单的, 但是反映出对于C++的运算优先顺序还是不够熟悉。以为自己做的不错,结果一个小问题,就能查出自己的基本功有问题呀。还是要多练习一下了。wiki中找到 C/C++的运算优先级列在如下:

    优先级运算符叙述示例重载性结合性
    1 :: 作用域解析(C++专有) Class::age = 2; 由左至右
    2 ++ 后缀递增 i++  
    -- 后缀递减 i--  
    {} 组合 {i++;a*=i;}  
    () 函数调用或变量初始化 c_tor(int x, int y) : _x(x), _y(y * 10) {}  
    [] 数组访问 array[4] = 2;  
    . 以对象方式访问成员 obj.age = 34;
    -> 以指针方式访问成员 ptr->age = 34;  
    dynamic_cast 运行时检查类型转换(C++专有) Y& y = dynamic_cast<Y&>(x);
    static_cast 未经检查的类型转换(C++专有) Y& y = static_cast<Y&>(x);
    reinterpret_cast 重定义类型转换(C++专有) int const* p = reinterpret_cast<int const*>(0x1234);
    const_cast 更改非常量属性(C++专有) int* q = const_cast<int*>(p);
    typeid 获取类型信息(C++专有) std::type_info const& t = typeid(x);
    3 ++ 前缀递增 ++i   由右至左
    -- 前缀递减 --i  
    + 一元正号 int i = +1;  
    - 一元负号 int i = -1;  
    !
    not
    逻辑非
    !的备用拼写
    if (!done) …  
    ~
    compl
    按位取反
    ~的备用拼写
    flag1 = ~flag2;  
    (type) 强制类型转换 int i = (int)floatNum;  
    * 取指针指向的值 int data = *intPtr;  
    & 取变量的地址 int *intPtr = &data;  
    sizeof 某某的大小 size_t s = sizeof(int);
    new 动态内存分配(C++专有) long* pVar = new long;  
    new[] 动态数组内存分配(C++专有) long* array = new long[20];  
    delete 动态内存释放(C++专有) delete pVar;  
    delete[] 动态数组内存释放(C++专有) delete [] array;  
    4 .* 成员对象选择(C++专有) obj.*var = 24; 由左至右
    ->* 成员指针选择(C++专有) ptr->*var = 24;  
    5 * 乘法 int i = 2 * 4;  
    / 除法 float f = 10.0 / 3.0;  
    % 模数(取余) int rem = 4 % 3;  
    6 + 加法 int i = 2 + 3;  
    - 减法 int i = 5 - 1;  
    7 << 比特左移 int flags = 33 << 1;  
    >> 比特右移 int flags = 33 >> 1;  
    8 < 小于关系 if (i < 42) …  
    <= 小于等于关系 if (i <= 42) ...  
    > 大于关系 if (i > 42) …  
    >= 大于等于关系 if (i >= 42) ...  
    9 ==
    eq
    等于关系
    ==的备用拼写
    if (i == 42) ...  
    !=
    not_eq
    不等于关系
    !=的备用拼写
    if (i != 42) …  
    10 &
    bitand
    比特 AND
    &的备用拼写
    flag1 = flag2 & 42;  
    11 ^
    xor
    比特 XOR(独占or)
    ^的备用拼写
    flag1 = flag2 ^ 42;  
    12 |
    bitor
    比特 OR(包含or)
    |的备用拼写
    flag1 = flag2 | 42;  
    13 &&
    and
    逻辑 AND
    &&的备用拼写
    if (conditionA && conditionB) …  
    14 ||
    or
    逻辑 OR
    ||的备用拼写
    if (conditionA || conditionB) ...  
    15 c?t:f 三元条件运算 int i = a > b ? a : b; 由右至左
    16 = 直接赋值 int a = b;  
    += 以和赋值 a += 3;  
    -= 以差赋值 b -= 4;  
    *= 以乘赋值 a *= 5;  
    /= 以除赋值 a /= 2;  
    %= 以取余数赋值 a %= 3;  
    <<= 以比特左移赋值 flags <<= 2;  
    >>= 以比特右移赋值 flags >>= 2;  
    &=
    and_eq
    以比特AND赋值
    &=的备用拼写
    flags &= new_flags;  
    ^=
    xor_eq
    以比特XOR赋值
    ^=的备用拼写
    flags ^= new_flags;  
    |=
    or_eq
    以比特OR赋值
    |=的备用拼写
    flags |= new_flags;  
    17 throw 抛出异常 throw EClass(“Message”);
    18 , 逗号运算符 for (i = 0, j = 0; i < 10; i++, j++) …   由左至右

    转载于:https://www.cnblogs.com/kwliu/archive/2013/06/01/3113380.html

    展开全文
  • 这次给大家带来php实现统计二进制内1的个数算法步骤详解,php实现统计二进制内1的个数算法的注意事项有哪些,下面就是...解法二(最优解):一个巧妙的方法,一个不为0的二进制数,肯定至少有一位是1,当这个数减一的...

    这次给大家带来php实现统计二进制内1的个数算法步骤详解,php实现统计二进制内1的个数算法的注意事项有哪些,下面就是实战案例,一起来看一下。

    问题

    输入一个十进制整数,输出该数二进制表示中1的个数。其中负数用补码表示。

    解决思路

    这是个位运算的题目。

    解法一:可以通过按位与操作,通过将每一位和1与操作来求出1的个数。

    解法二(最优解):一个巧妙的方法,一个不为0的二进制数,肯定至少有一位是1,当这个数减一的时候,它的最后一位1会变为0,后边的所有0会变为1。比如10100,减一之后会变为10011,然后用原数字10100和10011进行与操作之后,会得到10000,也就是通过这个操作,可以将一个1变为0,所以一个二进制数字能进行多少次这样的操作,就有多少个1.

    实现代码//解法一

    function NumberOf1($n)

    {

    $count = 0;

    $flag = 1;

    while ($flag != 0) {

    if (($n & $flag) != 0) {

    $count++;

    }

    $flag = $flag << 1;

    }

    return $count;

    }// 解法二

    function NumberOf1($n)

    {

    $count = 0;

    if($n < 0){ // 处理负数

    $n = $n&0x7FFFFFFF;

    ++$count;

    }

    while($n != 0){

    $count++;

    $n = $n & ($n-1);

    }

    return $count;

    }//测试

    $num=45;

    echo $num."的二进制是".decbin($num)."
    ";

    echo $num."共有".NumberOf1($num)."个1";

    运行结果:

    相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

    推荐阅读:

    展开全文
  • 本文实例讲述了php实现统计二进制中1的个数算法。...解法二(最优解):一个巧妙的方法,一个不为0的二进制数,肯定至少有一位是1,当这个数减一的时候,它的最后一位1会变为0,后边的所有0会变为1。比如10...

    本文实例讲述了php实现统计二进制中1的个数算法。分享给大家供大家参考,具体如下:

    问题

    输入一个十进制整数,输出该数二进制表示中1的个数。其中负数用补码表示。

    解决思路

    这是个位运算的题目。

    解法一:可以通过按位与操作,通过将每一位和1与操作来求出1的个数。

    解法二(最优解):一个巧妙的方法,一个不为0的二进制数,肯定至少有一位是1,当这个数减一的时候,它的最后一位1会变为0,后边的所有0会变为1。比如10100,减一之后会变为10011,然后用原数字10100和10011进行与操作之后,会得到10000,也就是通过这个操作,可以将一个1变为0,所以一个二进制数字能进行多少次这样的操作,就有多少个1.

    实现代码

    //解法一

    function NumberOf1($n)

    {

    $count = 0;

    $flag = 1;

    while ($flag != 0) {

    if (($n & $flag) != 0) {

    $count++;

    }

    $flag = $flag << 1;

    }

    return $count;

    }

    // 解法二

    function NumberOf1($n)

    {

    $count = 0;

    if($n < 0){ // 处理负数

    $n = $n&0x7FFFFFFF;

    ++$count;

    }

    while($n != 0){

    $count++;

    $n = $n & ($n-1);

    }

    return $count;

    }

    //测试

    $num=45;

    echo $num."的二进制是".decbin($num)."
    ";

    echo $num."共有".NumberOf1($num)."个1";

    运行结果:

    希望本文所述对大家PHP程序设计有所帮助。

    展开全文
  • 一个岛上有n个人,每个人的眼睛要么是蓝色的,要么是黑色的,并且至少有一个人眼睛是蓝色的。每个人都知道至少一个人眼睛是蓝色的事实,但是不知道具体几个人眼睛是蓝色的。每天所有人互相见面,他们可以看到别人的...
  • 很久很久以前曾经有一个古老的国度叫做bitland,bitland原本是三个小的国家,and, or, xor, 他们分别由各自的君主anddy, orry, xorry统治着,后来在三个君主的协商下,合并为一个共同的国家,并由三个君主共同制定...
  • 找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每字符出现次数都不少于 k 。输出 T 的长度。 示例 1: 输入: s = "aaabb", k = 3 输出: 3 最长子串为 "aaa" ,其中 'a' 重复了 3 次。 示例 2:...
  • 算法的定义

    千次阅读 2019-01-22 17:55:20
    文章目录一、算法的定义:二、基本特性:三、算法设计的要求:四、算法效率的度量方法:五、算法的时间复杂度六、算法的空间复杂度 一、算法的定义: 算法是解决特定问题求解决步骤的...输出:算法至少有一个或多个...
  • 接下来M行,每行包括3整数A,B,C(1,B,1),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。 输入保证至少存在1条商店到赛场的路线。 Output 对于每组输入,输出一行,表示...
  • 教严格的说法是,一个算法是对特定问题求解步骤的一种描述,它是指令的有限序列。 算法具有下面五个特征: 输入(input):算法零个或多个输入量 输出(output):算法至少产生一个输出...
  • (2)输出:输出一定要有,至少有一个 (3)确定性:算法的每条指令都是确定的,清晰的 (4)有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。 程序和算法不同,程序是算法用某种程序设计语言的...
  • 给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。 输入描述: 第一行表示多少个数n 第二行开始依次...
  • 每锁匙至少有3不同的深度且至少有1对相连的槽其深度之差为3。求这样的锁匙的总数。 Input 本题无输入 Output 对N>=2且N,输出满足要求的锁匙的总数。 Sample Output N=2: 0 N=3: 8 N=4: 64...
  • 顺子的特点是至少有5张点数连续的牌面,而且输入的数据是字母与数字混合的数组,不利于排序。因此必须对这样的情况进行转换:function pointToNum($arr){ $num=0; //统计在这副牌型中点数为数字的情况,从而判断A...
  • 算法设计与分析

    2018-07-14 13:52:31
    算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的算法是问题的程序化解决方案,一个问题可以设计不同的算法来求解,同一个算法可以采用不同的形式来描述:*描述算法可以多种方式,...
  • 算法

    2020-09-06 18:09:12
    输入输出 : 算法具有0个或者多个输入至少有一个输出 有穷性 : 指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。 确定性 : 算法的每一个步骤都具有确定的含义,...
  • 接下来M行,每行包括3整数A,B,C(1,B,1),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。 输入保证至少存在1条商店到赛场的路线。 Output 对于每组输入,输出一行,表示...
  • 给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。 范例 示例 1: 输入:s = “aaabb”, k = 3 输出:3 解释:最长子串为 “aaa” ,...
  • 精品文档 精品文档 第一章算法初步 1.1 算法与程序框图 1.1.1算法的概念 已知直角三角形两直角边长为 a, b,求斜边长c的一个算法分下列三步 计算c . a2 b2 输入直角三角形两直角边长 a, ... 至少有一个根 C.恰好有一个根
  • 【文中作者介绍的带hash的方法时间复杂度是O(N^2): 最坏循环两次。空间复杂度O(1) hash 至少一遍,找也是一遍。...题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,192
精华内容 476
关键字:

一个算法至少有一个输入