我是靠谱客的博主 无情猫咪,最近开发中收集的这篇文章主要介绍华为机试 (9/22)放苹果(递归)二进制1的个数(n&() n-1)配置文件恢复百鸡问题日期问题参数解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

华为机试

  • 放苹果(递归)
  • 二进制1的个数(n&() n-1)
  • 配置文件恢复
  • 百鸡问题
  • 日期问题
  • 参数解析

放苹果(递归)

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
放苹果分为两种情况,一种是有盘子为空,一种是每个盘子上都有苹果。
令(m,n)表示将m个苹果放入n个盘子中的摆放方法总数。
1.假设有一个盘子为空,则(m,n)问题转化为将m个苹果放在n-1个盘子上,即求得(m,n-1)即可
2.假设所有盘子都装有苹果,则每个盘子上至少有一个苹果,即最多剩下m-n个苹果,问题转化为将m-n个苹果放到n个盘子上
即求(m-n,n)

#include <stdio.h>

int fun(int m,int n){
    if(m==0||n==1){
        return 1;
    }else if(m<n){
        return fun(m,m);
    }else{
        return fun(m-n,n)+fun(m,n-1);
    }
}
int main(){
    int a,b,num;
    while(~scanf("%d%d",&a,&b)){
        num = fun(a,b);
        printf("%dn",num);
    }
}

二进制1的个数(n&() n-1)

n&(n-1)可以消去二进制中的0

#include <stdio.h>
int main()
{
    int a;
    int count = 0;
    while (scanf("%d", &a) != EOF) {
        while (a) {
            a &= (a - 1);
            count++;
        }
        printf("%dn", count);
        count = 0;
    }
    return 0;
}

配置文件恢复

命 令 | 执 行
reset | reset what
reset board | board fault
board add | where to add
board delete | no board at all
reboot backplane | impossible
backplane abort | install first
he he | unknown command
注意:he he不是命令。
为了简化输入,方便用户,以“最短唯一匹配原则”匹配:
1、若只输入一字串,则只匹配一个关键字的命令行。例如输入:r,根据该规则,匹配命令reset,执行结果为:reset what;输入:res,根据该规则,匹配命令reset,执行结果为:reset what;
2、若只输入一字串,但本条命令有两个关键字,则匹配失败。例如输入:reb,可以找到命令reboot backpalne,但是该命令有两个关键词,所有匹配失败,执行结果为:unknown command
3、若输入两字串,则先匹配第一关键字,如果有匹配但不唯一,继续匹配第二关键字,如果仍不唯一,匹配失败。例如输入:r b,找到匹配命令reset board 和 reboot backplane,执行结果为:unkown command。
4、若输入两字串,则先匹配第一关键字,如果有匹配但不唯一,继续匹配第二关键字,如果唯一,匹配成功。例如输入:b a,无法确定是命令board add还是backplane abort,匹配失败。
5、若输入两字串,第一关键字匹配成功,则匹配第二关键字,若无匹配,失败。例如输入:bo a,确定是命令board add,匹配成功。
6、若匹配失败,打印“unknown command”

#include<stdio.h>
#include<string.h>
#include<ctype.h>
char *cmdh[5]={"reset","board","board","reboot","backplane"};
char *cmdl[5]={"board","add","delete","backplane","abort"};
char *cmdout[5]={"board fault",
               "where to add",
               "no board at all",
               "impossible",
               "install first" };
int main()
{
    char cmdin[100];
    while(gets(cmdin))
    {
        int n,len_1,len= strlen(cmdin);;
        int flag=0,pos=0,cnt=0;
        int index_o = 0;
        for(int n=0;n<len;n++)
        {
            if(cmdin[n]==' ')
            {
                flag=1;
                pos=n;
                break;
            }
        }
        if(flag == 1)
        {
            for(int n=0;n<5;n++)
            {
                if(strncmp(cmdh[n],cmdin,pos)==0 && strncmp(cmdl[n],cmdin+pos+1,len-pos-1)==0)
                {
                    cnt++;
                    index_o = n;
                }
            }
            if(cnt == 1) printf("%sn",cmdout[index_o]);
            else printf("unknown commandn");
        }
        else{
            if(strncmp("reset",cmdin,len)==0)
            {
                printf("reset whatn");
            }
            else{
                printf("unknown commandn");
            }
        }
    }
    return 0;
}

百鸡问题

鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

#include "stdio.h"

int main(void)
{
    int n;
    while(~scanf("%d",&n))
    {
        int i,j,k;    //i是公鸡,j是母鸡,k是鸡仔
        for(i=0;i<20;i++)
        {
            for(j=0;j<33;j++)
            {
                k=100-i-j;
                if((5*i+3*j+k/3 ==100)&&(k%3 ==0))
                {
                    printf("%d %d %d",i,j,k);
                    printf("n");
                }
            }
        }
    }
    return 0;
}

日期问题

计算是一年的第几天

#include<stdio.h>
int Run(int a)
{
    if(a%4==0)
    {
        if(a%400==0)
            return 1;
        if(a%100==0)
            return 0;
        return 1;
    }
    else
        return 0;
}
int main()
{
    int mon1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int mon2[12]={31,29,31,30,31,30,31,31,30,31,30,31};

    int a,b,c,day;
   while((scanf("%d",&a))!=EOF)
   {
     day=0;
    scanf("%d",&b);
    scanf("%d",&c);
    int i=0;
    for(i=0;i<b-1;i++)
    {
        if(Run(a))
        day+=mon2[i];
        else
        day+=mon1[i];
    }
    day+=c;
    printf("%dn",day);
   }
    return 0;
}

参数解析

在命令行输入如下命令:
xcopy /s c: d:,
各个参数如下:
参数1:命令字xcopy
参数2:字符串/s
参数3:字符串c:
参数4: 字符串d:
请编写一个参数解析程序,实现将命令行各个参数解析出来。

解析规则:
1.参数分隔符为空格
2.对于用“”包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:program files” “d:”时,参数仍然是4个,第3个参数应该是字符串C:program files,而不是C:program,注意输出参数时,需要将“”去掉,引号不存在嵌套情况。
3.参数不定长
4.输入由用例保证,不会出现不符合要求的输入

#include <stdio.h>
#include <string.h>
int main()
{
	char str[1000];
	int len,count =0;
	int flag=0;
	gets(str);
	len = strlen(str);
	for (int i = 0; i < len; i++)
	{
		if (str[i] == '"')
			flag++;
		if ((flag % 2 == 0) && str[i] == ' ')
			count++;
	}
	printf("%dn", count + 1);
	flag = 0;
	for (int i = 0; i < len; i++)
	{
		if (str[i] == '"')
			flag++;
		if (str[i] != '"')
		{
			if ((flag % 2 == 0)&& (str[i] == ' '))
			{
				printf("n");
			}
			else
				printf("%c", str[i]);
		}		
	}
	printf("n");

} 

最后

以上就是无情猫咪为你收集整理的华为机试 (9/22)放苹果(递归)二进制1的个数(n&() n-1)配置文件恢复百鸡问题日期问题参数解析的全部内容,希望文章能够帮你解决华为机试 (9/22)放苹果(递归)二进制1的个数(n&() n-1)配置文件恢复百鸡问题日期问题参数解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部