相关蓝桥.docx

上传人:b****3 文档编号:27049420 上传时间:2023-06-26 格式:DOCX 页数:35 大小:48.07KB
下载 相关 举报
相关蓝桥.docx_第1页
第1页 / 共35页
相关蓝桥.docx_第2页
第2页 / 共35页
相关蓝桥.docx_第3页
第3页 / 共35页
相关蓝桥.docx_第4页
第4页 / 共35页
相关蓝桥.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

相关蓝桥.docx

《相关蓝桥.docx》由会员分享,可在线阅读,更多相关《相关蓝桥.docx(35页珍藏版)》请在冰豆网上搜索。

相关蓝桥.docx

相关蓝桥

题目描述:

   星期几

1949年的国庆节(10月1日)是星期六。

 

   今年(2012)的国庆节是星期一。

   那么,从建国到现在,有几次国庆节正好是星期日呢?

   只要答案,不限手段!

   可以用windows日历,windows计算器,Excel公式,。

   当然,也可以编程!

   不要求写出具体是哪些年,只要一个数目!

   千万不要提交源代码!

   答案不要写在这里,写在“解答.txt”中

 

思路:

一般的日期计算,吧星期日当做星期7算就可以了,对所在天数取余,9月算完在加一天对七取余看看是不是7,如果是那么成立并输出答案,不是不成立。

注意:

闰年的判断,月份天数的判断(二月十分重要),边界问题。

 

AC代码:

#include

intRun(intyear)

{

   if(year%400==0||(year%4==0&&year%100!

=0))

   return1;

   else

   return0;

}

intmonth(intyear,intn)

{

   intaws;

   switch(n)

   {

      case1:

aws=31;break;

      case2:

{

           if(Run(year))

           aws=29;

           elseaws=28;

      }break;

      case3:

aws=31;break;

      case4:

aws=30;break;

      case5:

aws=31;break;

      case6:

aws=30;break;

      case7:

aws=31;break;

      case8:

aws=31;break;

      case9:

aws=30;break;

      case10:

aws=31;break;

      case11:

aws=30;break;

      case12:

aws=31;break;

   }

   returnaws;

}

intmain()

{

   inti,j,x,sum;

   sum=5;

   for(i=10;i<=12;i++)

   {

     sum+=month(1949,i);

   }

   for(i=1950;i<=2013;i++)//今天是2014年3月14日,所以算到2013年即可

   {

     for(j=1;j<=12;j++)

     {

        sum+=month(i,j);

        if(j==9)

        {

           x=sum%7;

           if(x+1==7)

           printf("%d年的国庆节是星期日。

\n",i);

        }

     }

   }

   return0;

}

运送马匹

运送马匹

 有1个人,要把n匹马从A村运往B村。

 初始时,人和马都在A村。

每次骑1匹马牵1匹马,回来时骑1匹马。

 已知每匹马从A村到B村需要的时间(数字越大越慢)

 两匹马同行时只能迁就较慢者。

 求所有马匹都运到B村的最小的运输时间(此时,人和马都在B村)。

 程序首先输入一个整数n(n<100),表示有n匹马。

 接着是n行整数,表示马从A村到B村的所用的分钟数(小于1000)

 程序输出:

1个整数,表示所有马匹均运到B村的最小总耗时。

 例如,

输入:

3

1

2

4

程序应输出:

7

输入:

4

1

4

2

5

程序应该输出:

12

对于编程题目,要求选手给出的解答完全符合ANSIC++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

代码中允许使用STL类库,但不能使用MFC或ATL等非ANSIc++标准的类库。

例如,不能使用CString类型(属于MFC类库)。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意选择自己使用的编译环境。

 

思路:

选择两匹最快的马匹来回运送其它的马匹,最后的最后再将这两批最快的马匹运回就完成了

因为用到贪心思想,所以一开始要将马匹的速度从小到大排序,得到速度最快的前两个马匹,之后

运用递归的方法来运送马匹,一回合用最快的马运送两个(例如:

1,2,5,4,8:

排序后:

1,2,4,5,8;先用1,2,将1送到目的地,用时a[1],2返回

,用时a[1],之后速度倒数第二的马匹和速度倒数第一的马匹一起过去,用的时间是a[n-1](此时B地有马3匹,分别是1和a[n-2]和a[n-1]),

之后1再回去,用时a[0],一回合的用时就是a[1]*2+a[0]+a[n-1],此时运送了两匹马(a[n-2]和a[n-1])),直到运送完毕

#include

#include

usingnamespacestd;

inta[200],sum=0;

intFun(intn)

{

if(n==1)

sum+=a[0];

elseif(n==2)

sum+=a[1];

elseif(n==3)

sum+=a[1]+a[2];

else

{

sum+=2*a[1]+a[0]+a[n-1];//每一回合的式子

Fun(n-2);//运好两匹马之后递归

}

}

intmain()

{

inti,j,n,m1,m2;

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]);

sort(a,a+n);//排序(从小到大)

Fun(n);

printf("%d\n",sum);

return0;

}

画表格

画表格

在中文Windows环境下,控制台窗口中也可以用特殊符号拼出漂亮的表格来。

比如:

 

┌─┬─┐

│   │   │

├─┼─┤

│   │   │

└─┴─┘

其实,它是由如下的符号拼接的:

左上=┌

上= ┬

右上= ┐

左= ├

中心= ┼

右= ┤

左下= └

下= ┴

右下= ┘

垂直= │

水平=  ─

本题目要求编写一个程序,根据用户输入的行、列数画出相应的表格来。

例如用户输入:

32

则程序输出:

┌─┬─┐

│   │   │

├─┼─┤

│   │  │

├─┼─┤

│    │ │

└─┴─┘

用户输入:

23

则程序输出:

┌─┬─┬─┐

│   │   │   │

├─┼─┼─┤

│   │  │    │

└─┴─┴─┘

对于编程题目,要求选手给出的解答完全符合ANSIC++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

代码中允许使用STL类库,但不能使用MFC或ATL等非ANSIc++标准的类库。

例如,不能使用CString类型(属于MFC类库)。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意选择自己使用的编译环境。

 

思路:

先输出第一小排和最后一排,中间的交替,每一排不一样的字符中间交替

如2行4列用题中所给的小字符组合的话,需要的字符是5行9列,其它几组也看看就发现规律了,自己画图想想

代码仅供参考

#include

intmain()

{

inti,j,n,m,x,y,k;

while(scanf("%d%d",&n,&m)!

=EOF)

{

x=m*2+1;y=n*2+1;//转换(很重要,想想为什么,自己画画图就懂了)

printf("┌");

for(i=2;i<=x-1;i++)

{

if(i%2==0)

printf("─");

else

printf("┬");

}

printf("┐");

puts("");

for(i=2;i<=y-1;i++)

{

if(i%2==0)

{

for(j=1;j<=x;j++)

{

if(j%2!

=0)

printf("│");

else

printf("");

}

puts("");

}

else

{

printf("├");

for(k=2;k<=x-1;k++)

{

if(k%2==0)

printf("─");

else

printf("┼");

}

printf("┤");

puts("");

}

}

printf("└");

for(i=2;i<=x-1;i++)

{

if(i%2==0)

printf("─");

else

printf("┴");

}

printf("┘");

puts("");

}

return0;

}

硬币方案

硬币方案

有50枚硬币,可能包括4种类型:

1元,5角,1角,5分。

已知总价值为20元。

求各种硬币的数量。

比如:

2,34,6,8就是一种答案。

而2,33,15,0是另一个可能的答案,显然答案不唯一。

你的任务是确定类似这样的不同的方案一共有多少个(包括已经给出的2个)?

直接提交该数字,不要提交多余的内容。

 

思路:

什么也别想,比赛时间紧,而且只要求输出答案即可,直接暴力搜索!

小技巧:

5角,1角,5分化成浮点型数据(double)容易计算出错,把所有数去全乘以100,20块变成2000块,

1元,5角,1角,5分变成100元,50元,10元,5元。

整形计算出错率大大降低

AC代码:

#include

intb[1000][4];

intmain()

{

inti,j,x,p,k=0;

intn=2000;

for(i=0;i<=50;i++)

for(j=0;j<=50;j++)

for(x=0;x<=50;x++)

for(p=0;p<=50;p++)

{

if(i*100+j*50+x*10+p*5==n&&i+j+x+p==50)

{

b[k][0]=i;b[k][1]=j;b[k][2]=x;b[k][3]=p;

printf("%d%d%d%d\n",i,j,x,p);

k++;

}

}

for(i=0;i

{

for(j=0;j<4;j++)

printf("%d",b[i][j]);

puts("");

}

printf("总数为:

%d\n",k);

while

(1);

return0;

}

歌赛新规则

歌赛新规则

歌手大赛的评分规则一般是去掉一个最高分,去掉一个最低分,剩下的分数求平均。

当评委较少的时候,如果我们只允许去掉一个分数,该如何设计规则呢?

有人提出:

应该去掉与其余的分数平均值相差最远的那个分数。

即“最离群”的分数。

以下的程序用于实现这个功能。

其中x存放所有评分,n表示数组中元素的个数。

函数返回最“离群”的那个分数值。

请补全缺失的代码。

doublescore(doublex[],intn)

{

inti,j;

doubledif=-1;

doublebad;

for(i=0;i

{

doublesum=0;

for(j=0;j

{

if(j!

=i)sum+=x[j];//除了要检测的那个分数不加外,其他分数计算总和

}

doublet=x[i]-sum/(n-1);//看看要检测的那个分数与剩下的所有的分数的平均值的差距

if(t<0)t=-t;//不要负数

if(t>dif)//如果大于上一次的几率,更新最大差距

{

dif=t;

bad=x[i];//记录最坏数

printf("%d,%f\n",i,x[i]);

}

}

returnbad;

}

n进制小数

n进制小数

将任意十进制正小数分别转换成2,3,4,5,6,7,8,9进制正小数,小数点后保留8位,并输出。

例如:

若十进制小数为0.795,则输出:

十进制正小数0.795000转换成 2进制数为:

0.11001011

十进制正小数0.795000转换成 3进制数为:

0.21011011

十进制正小数0.795000转换成 4进制数为:

0.30232011

十进制正小数0.795000转换成 5进制数为:

0.34414141

十进制正小数0.795000转换成 6进制数为:

0.44341530

十进制正小数0.795000转换成 7进制数为:

0.53645364

十进制正小数0.795000转换成 8进制数为:

0.62702436

十进制正小数0.795000转换成 9进制数为:

0.71348853

以下代码提供了这个功能。

其中,dTestNo表示待转的十进制小数。

iBase表示进制数。

请填写缺失的部分。

voidfun(doubledTestNo,intiBase)

{

intiT[8];

intiNo;

printf("十进制正小数%f 转换成%d 进制数为:

",dTestNo,iBase);

for(iNo=0;iNo<8;iNo++)

{

dTestNo*=iBase;

iT[iNo]=_____________;

if(________)dTestNo-=iT[iNo];

}

printf("0.");

for(iNo=0;iNo<8;iNo++)   printf("%d",iT[iNo]);

printf("\n");

}

 

思路:

首先要了解“十进制数小数部分如何转化成n进制数”

十进制数0.3转化成二进制数的方法如下:

0.3×2=0.6……整数部分为0,记0;

0.6×2=1.2……整数部分为1,记1;

0.2×2=0.4……整数部分为0,记0;

0.4×2=0.8……整数部分为0,记0;

0.8×2=1.6……整数部分为1,记1; ...

 

voidfun(doubledTestNo,intiBase)

{

intiT[8];

intiNo;

printf("十进制正小数%f转换成%d进制数为:

",dTestNo,iBase);

for(iNo=0;iNo<8;iNo++)

{

dTestNo*=iBase;

iT[iNo]=(int)dTestNo;//如上面的计算方法,只取整数部分

if(____dTestNo>1____)dTestNo-=iT[iNo];

//如果整数部分不是0而大于0,要去掉整数部分,因为下一次只能计算小数部分

//再者想,本题是小数转化为n进制,dTestNo就是个小数,凭这一点第二个空也应该转化成小数了

}

printf("0.");

for(iNo=0;iNo<8;iNo++)printf("%d",iT[iNo]);

printf("\n");

}

中奖计算

中奖计算

某抽奖活动的规则是:

每位参与者在纸上写下一个8位数的号码。

最后通过摇奖的办法随机产生一个8位数字。

参与者写下的数字中最多有多少个连续位与开奖号码中的相同,则称为中了几个号。

例如:

小张写的数字是:

12345678,而开奖号码是:

42347856。

则称小张中了3个号,因为其中最长的相同连续位是:

“234”。

如果小张写的是:

87654321,则他只中了一个号。

下面的代码根据传入的参数,返回中了几个号。

其中:

a表示被评价的号码,b表示摇号产生的数字。

请填写缺少的代码。

intg(inta,intb)

{

charsa[]="00000000";

charsb[]="00000000";

intn=0;

inti,j;

sprintf(sa,"%8d",a);

sprintf(sb,"%8d",b);

for(i=0;i<8;i++)

{

for(j=1;j<=8-i;j++)

{

chart=________;

sa[i+j]=0;

if(strstr(sb,sa+i))

{

if(j>n)_________;

}

sa[i+j]=t;

}

}

returnn;

}

 

 

首先要了解这两个函数:

sprintf与strstr

1>sprintf

sprintf

字串格式化命令,主要功能是把格式化的数据写入某个字符串中。

sprintf是个变参函数。

功能

把格式化的数据写入某个字符串缓冲区。

头文件

stdio.h

原型

intsprintf(char*buffer,constchar*format,[argument]…);

参数列表

buffer:

char型指针,指向将要写入的字符串的缓冲区。

format:

格式化字符串。

[argument]...:

可选参数,可以是任何类型的数据。

返回值:

字符串长度(strlen)

/*例子*/

#include//某个头文件

intmain()/*主函数“整数”类型*/

{

     charbuffer[50];/*“字符”类型的数组,下面共有50个元素。

*/

     intn,a=5,b=3;/*三个变量都为“整数”类型*/

     n=sprintf(buffer,"%dplus%dis%d",a,b,a+b);/*赋予数值*/

     printf("[%s]isastring%dcharslong\n",buffer,n);/*“格式输出”*/

 

     return0;/*“返回零”

     也就是程序正常退出*/

}

输出结果:

[5plus3is8]isastring13charslong

 

2>strstr

包含文件:

string.h

函数名:

strstr

函数原型:

externchar*strstr(char*str1,char*str2);

功能:

从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1中str2起始位置的指针,如果没有,返回null。

返回值:

返回该位置的指针,如找不到,返回空指针。

例子:

charstr[]="1234xyz"; 

char*str1=strstr(str,"34"); 

cout<

显示:

   34xyz

intg(inta,intb)

{

charsa[]="00000000";

charsb[]="00000000";

intn=0;

inti,j;

sprintf(sa,"%8d",a);

sprintf(sb,"%8d",b);

for(i=0;i<8;i++)

{

for(j=1;j<=8-i;j++)

{

chart=sa[i+j];//为了设置结束标签之后好还原sa[i+j]

sa[i+j]=0;//设置结束标签(我认为应该是'\0')

if(strstr(sb,sa+i))//从i一直对比到i+j

{

if(j>n)n=j;//如果出现比上一次记录的最长连续相等序列还长,就替换掉它

}

sa[i+j]=t;//把sa[i+j]还原回来

}

}

returnn;

}

程序设计题一

方阵的主对角线之上称为“上三角”。

请你设计一个用于填充n阶方阵的上三角区域的程序。

填充的规则是:

使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。

例如:

当n=3时,输出:

123

64

5

当n=4时,输出:

1234

9105

86

7

当n=5时,输出:

12345

1213146

11157

108

9

程序运行时,要求用户输入整数n(3~20)

程序输出:

方阵的上三角部分。

要求格式:

每个数据宽度为4,右对齐。

#include

#include

inta[30][30];

intmain()

{

inti,j,n,sum,num,k,m,x,pop;

while(~scanf("%d",&n))

{

sum=0;k=1;m=0;num=n,pop=1;

while(sum

{

i=m;

if(k==1)

x=num;

else

x=num-pop++;

for(j=m;j

{

if(sum==n*n-((n*n)/2)+n/2)

break;

a[i][j]=k++;

sum++;

}

j=x-2;

for(i=m+1;i

{

if(sum==n*n-((n*n)/2)+n/2)

break;

a[i][j--]=k++;sum++;

}

j=m;

for(i=x-2;i>=m+1;i--)

{

if(sum==n*n-((n*n)/2)+n/2)

break;

a[i][j]=k++;sum++;

}

m++;num--;

}

m=n;

for(i=0;i

{

for(j=0;j

{

printf("%4d",a[i][j]);

}

m--;

puts("");

}

}

return0;

}

程序设计题二

公司发了某商店的购物券1000元,限定只能购买店中的m种商品。

每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。

程序输入:

第一行是一个整数m,代表可购买的商品的种类数。

接下来是m个整数,每个1行,分别代表这m种商品的单价。

程序输出:

第一行是一个整数,表示共有多少种方案

第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。

例如:

输入:

2

200

300

则应输出:

2

22

50

输入:

2

500

800

则应输出:

1

20

 

#include

#include

intcost;

intn;//物品个数

intprice[2000];//物品单价

intnu

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1