华为编程大赛题目
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
char des[1024];
cin>>src>>des;
cout<<str_str(src,des)<<endl;
rቤተ መጻሕፍቲ ባይዱturn 0;
}
unsigned int str_str(char * src, char *dst)
{
unsigned int loc=0;
返回:如果dst是src的子串 则返回起始位置 如果不是 则返回0
输入:src 指向母串的指针; dst 指向子串的指针
示例
src->akrsd5859 dst->rsd
则返回3
src->Rstsawerst36ds dst->rst
则返回8
src->dfsge dst-> dfsgesa
{
loc_point=src_tmp;
loc=src_tmp-src+1;
src_tmp++;
dst_tmp++;
}else
输入:n 游戏总人数 s 报数的起始编号 m 报数的数值
输出:p 指向长度为n的数组,出圈次序保存在p指向的数组中
示例
n=7 s=2 m=3 出圈次序为:4 7 3 1 6 2 5
n=3 s=1 m=2 出圈次序为:2 1 3
#include<iostream>
*temp=-1;
if(n1==1)
break;
while(m1)
{
if(temp==end)
temp=p;
else
问题描述:
在32位处理器上,将任一整数转换为二进制形式。
要求实现函数:
void DecToBin (unsigned int iDec, char pBin[32])
输入:iDec 需要转换的十进制整数
输出:pBin 转换为二进制后的字符串,高位在左边,不足32位补0
示例
temp++;
if(*temp!=-1)
m1--;
}
m1=m;
n1--;
}
}
2. 实现子串查找程序
问题描述:
示例
输入:input=“aBc 12%”;输出:letters=3, numbers=2, blanks=1, others=1
输入:input=“1”;输出:letters=0, numbers=1, blanks=0, others=0
2. 数制转换
输入:year=1990,month=1,day=5;函数返回:0
#include "func.h"
#include <stdio.h>
#include <stdlib.h>
void count(const char *input, unsigned int * letters, unsigned int * numbers, unsigned int * blanks, unsigned int * others)
src_tmp++;
}
}
return loc;
}
1. 字符统计
问题描述:
实现一个函数,要求输入一个字符串,分别统计出其中 “英文字母”、“数字”、“空格”、“其它字符”的个数。
要求实现函数:
{
*letters=0;
*numbers=0;
*blanks=0;
*others=0;
int i;
for(i=0;input[i]!='\0';++i)
{
if((input[i]>='a'&&input[i]<='z')||(input[i]>='A'&&input[i]<='Z'))
则返回0
view plainprint?
#include<iostream>
using namespace std;
unsigned int str_str(char * src, char *dst);
int main()
{
char src[1024];
using namespace std;
void circle_sort(int n,int s,int m,int *p);
int main()
{
int n=10;//游戏总人数
int s=7;//起始编号
int m=4;//报数数值
return 1;
else
return 0;
}
void TestEntry()
{printf("%d\n",isWorking(1990,1,5));
}
for(i=1;i<month;++i)
{
if((year%400)==0||(year%4==0&&year%100!=0))
ans+=rn[i];
else ans+=pn[i];
}
ans+=day;
while(ans>5)
ans-=5;
if(ans<=3)
华为编程大赛题目
1. 报数游戏
问题描述:
设有N个人围坐一圈并按顺时针方向从1到N编号,从第S个人开始进行1到M报数,报数到第M个人时,此人出圈,再从他的下一个人重新开始1到M的报数,如此进行下去直到所有的人都出圈为止。现要打印出出圈次序。
要求实现函数:
void circle_sort (int n, int s, int m, int *p)
int pn[]={1,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
for(i=1990;i<year;++i)
{
if((i%400)==0||(i%4==0&&i%100!=0))
ans+=366;
else
ans+=365;
dst_tmp++;
}else//表示不同,src_tmp指针回到两首位匹配的下一位.dst_tmp回到src首位.loc置为0;
{
src_tmp=loc_point+1;
++(*letters);
else if(input[i]>='0'&&input[i]<='9')
++(*numbers);
else if(input[i]==' ')
++(*blanks);
else
++(*others);
}
}
void DecToBin(unsigned int iDec, char pBin[32])
{
int index=0,i;
char ans[50];
for(i=0;i<50;++i)
ans[i]='0';
while(iDec)
{
ans[index++]=iDec%2+'0';
iDec/=2;
}
int x=0;
for(i=31;i>=0;--i)
pBin[x++]=ans[i];
pBin[32]='\0';
}
int isWorking(unsigned int year, unsigned int month, unsigned int day)
{
int ans=0;
int rn[]={1,31,29,31,30,31,30,31,31,30,31,30,31};
输入:123 输出:{“00000000000000000000000001111011”}
3. 打鱼还是晒网
问题描述:
中国有句俗话叫“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天是“打鱼”还是“晒网”?
(需要考虑闰年:年数“能被4除尽且不能被100除尽”或“直接能被400除尽”看做闰年,如2000年是闰年,而1900年不是)
char *loc_point=0;
char *src_tmp=src;
char *dst_tmp=dst;
while(*src_tmp!='/0'&&*dst_tmp!='/0')
{
if(loc)//表示已经找到src和dst首位相同的位置
void count(const char *input, unsigned int * letters, unsigned int * numbers, unsigned int * blanks, unsigned int * others)
输入:input 输入的字符串
输出:letters 输出其中的“英文字母”个数, numbers输出其中的“数字”个数,blanks输出其中的“空格”个数,others输出其中的“其他字符”个数
{
if(*src_tmp-*dst_tmp==32||*src_tmp-*dst_tmp==-32||*src_tmp-*dst_tmp==0)//表示相同,继续下一位匹配
{
src_tmp++;
判断一个字符串(dst)是否是另一个字符串(src)的子串;
输出子串在母串中的第一次出现的起始位置;
匹配的时候不区分大小写;
不能使用库函数(使用库函数按0分计算);
要求实现函数:
unsigned int str_str(char * src, char *dst);
*(p+i)=i+1;
int *end=p+n-1;
int *temp=p+(s+m-2)%n;
int n1=n,s1=s,m1=m;
while(n1)
{
cout<<*temp<<" ";
要求实现函数:
int isWorking(unsigned int year, unsigned int month, unsigned int day);
输入:year,month,day 分别为年,月,日
返回:int类型,如果是“打鱼”,就返回1;如果是“晒网”,就返回0
示例
int *p=new int[n];
circle_sort(n,s,m,p);
cout<<endl;
return 0;
}
void circle_sort(int n,int s,int m,int *p)
{
for(int i=0;i<n;i++)
loc=0;
loc_point=0;
dst_tmp=dst;
}
}else
{
if(*src_tmp-*dst_tmp==32||*src_tmp-*dst_tmp==-32||*src_tmp-*dst_tmp==0)
cin>>src>>des;
cout<<str_str(src,des)<<endl;
rቤተ መጻሕፍቲ ባይዱturn 0;
}
unsigned int str_str(char * src, char *dst)
{
unsigned int loc=0;
返回:如果dst是src的子串 则返回起始位置 如果不是 则返回0
输入:src 指向母串的指针; dst 指向子串的指针
示例
src->akrsd5859 dst->rsd
则返回3
src->Rstsawerst36ds dst->rst
则返回8
src->dfsge dst-> dfsgesa
{
loc_point=src_tmp;
loc=src_tmp-src+1;
src_tmp++;
dst_tmp++;
}else
输入:n 游戏总人数 s 报数的起始编号 m 报数的数值
输出:p 指向长度为n的数组,出圈次序保存在p指向的数组中
示例
n=7 s=2 m=3 出圈次序为:4 7 3 1 6 2 5
n=3 s=1 m=2 出圈次序为:2 1 3
#include<iostream>
*temp=-1;
if(n1==1)
break;
while(m1)
{
if(temp==end)
temp=p;
else
问题描述:
在32位处理器上,将任一整数转换为二进制形式。
要求实现函数:
void DecToBin (unsigned int iDec, char pBin[32])
输入:iDec 需要转换的十进制整数
输出:pBin 转换为二进制后的字符串,高位在左边,不足32位补0
示例
temp++;
if(*temp!=-1)
m1--;
}
m1=m;
n1--;
}
}
2. 实现子串查找程序
问题描述:
示例
输入:input=“aBc 12%”;输出:letters=3, numbers=2, blanks=1, others=1
输入:input=“1”;输出:letters=0, numbers=1, blanks=0, others=0
2. 数制转换
输入:year=1990,month=1,day=5;函数返回:0
#include "func.h"
#include <stdio.h>
#include <stdlib.h>
void count(const char *input, unsigned int * letters, unsigned int * numbers, unsigned int * blanks, unsigned int * others)
src_tmp++;
}
}
return loc;
}
1. 字符统计
问题描述:
实现一个函数,要求输入一个字符串,分别统计出其中 “英文字母”、“数字”、“空格”、“其它字符”的个数。
要求实现函数:
{
*letters=0;
*numbers=0;
*blanks=0;
*others=0;
int i;
for(i=0;input[i]!='\0';++i)
{
if((input[i]>='a'&&input[i]<='z')||(input[i]>='A'&&input[i]<='Z'))
则返回0
view plainprint?
#include<iostream>
using namespace std;
unsigned int str_str(char * src, char *dst);
int main()
{
char src[1024];
using namespace std;
void circle_sort(int n,int s,int m,int *p);
int main()
{
int n=10;//游戏总人数
int s=7;//起始编号
int m=4;//报数数值
return 1;
else
return 0;
}
void TestEntry()
{printf("%d\n",isWorking(1990,1,5));
}
for(i=1;i<month;++i)
{
if((year%400)==0||(year%4==0&&year%100!=0))
ans+=rn[i];
else ans+=pn[i];
}
ans+=day;
while(ans>5)
ans-=5;
if(ans<=3)
华为编程大赛题目
1. 报数游戏
问题描述:
设有N个人围坐一圈并按顺时针方向从1到N编号,从第S个人开始进行1到M报数,报数到第M个人时,此人出圈,再从他的下一个人重新开始1到M的报数,如此进行下去直到所有的人都出圈为止。现要打印出出圈次序。
要求实现函数:
void circle_sort (int n, int s, int m, int *p)
int pn[]={1,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
for(i=1990;i<year;++i)
{
if((i%400)==0||(i%4==0&&i%100!=0))
ans+=366;
else
ans+=365;
dst_tmp++;
}else//表示不同,src_tmp指针回到两首位匹配的下一位.dst_tmp回到src首位.loc置为0;
{
src_tmp=loc_point+1;
++(*letters);
else if(input[i]>='0'&&input[i]<='9')
++(*numbers);
else if(input[i]==' ')
++(*blanks);
else
++(*others);
}
}
void DecToBin(unsigned int iDec, char pBin[32])
{
int index=0,i;
char ans[50];
for(i=0;i<50;++i)
ans[i]='0';
while(iDec)
{
ans[index++]=iDec%2+'0';
iDec/=2;
}
int x=0;
for(i=31;i>=0;--i)
pBin[x++]=ans[i];
pBin[32]='\0';
}
int isWorking(unsigned int year, unsigned int month, unsigned int day)
{
int ans=0;
int rn[]={1,31,29,31,30,31,30,31,31,30,31,30,31};
输入:123 输出:{“00000000000000000000000001111011”}
3. 打鱼还是晒网
问题描述:
中国有句俗话叫“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天是“打鱼”还是“晒网”?
(需要考虑闰年:年数“能被4除尽且不能被100除尽”或“直接能被400除尽”看做闰年,如2000年是闰年,而1900年不是)
char *loc_point=0;
char *src_tmp=src;
char *dst_tmp=dst;
while(*src_tmp!='/0'&&*dst_tmp!='/0')
{
if(loc)//表示已经找到src和dst首位相同的位置
void count(const char *input, unsigned int * letters, unsigned int * numbers, unsigned int * blanks, unsigned int * others)
输入:input 输入的字符串
输出:letters 输出其中的“英文字母”个数, numbers输出其中的“数字”个数,blanks输出其中的“空格”个数,others输出其中的“其他字符”个数
{
if(*src_tmp-*dst_tmp==32||*src_tmp-*dst_tmp==-32||*src_tmp-*dst_tmp==0)//表示相同,继续下一位匹配
{
src_tmp++;
判断一个字符串(dst)是否是另一个字符串(src)的子串;
输出子串在母串中的第一次出现的起始位置;
匹配的时候不区分大小写;
不能使用库函数(使用库函数按0分计算);
要求实现函数:
unsigned int str_str(char * src, char *dst);
*(p+i)=i+1;
int *end=p+n-1;
int *temp=p+(s+m-2)%n;
int n1=n,s1=s,m1=m;
while(n1)
{
cout<<*temp<<" ";
要求实现函数:
int isWorking(unsigned int year, unsigned int month, unsigned int day);
输入:year,month,day 分别为年,月,日
返回:int类型,如果是“打鱼”,就返回1;如果是“晒网”,就返回0
示例
int *p=new int[n];
circle_sort(n,s,m,p);
cout<<endl;
return 0;
}
void circle_sort(int n,int s,int m,int *p)
{
for(int i=0;i<n;i++)
loc=0;
loc_point=0;
dst_tmp=dst;
}
}else
{
if(*src_tmp-*dst_tmp==32||*src_tmp-*dst_tmp==-32||*src_tmp-*dst_tmp==0)