当前位置: 首页 > news >正文

网站推广软文案例网站外链建设需要考核

网站推广软文案例,网站外链建设需要考核,海南室内设计公司排名,wordpress新增文章小工具一.阶乘计算升级版 本题要求实现一个打印非负整数阶乘的函数。 其中n是用户传入的参数,其值不超过1000。如果n是非负整数,则该函数必须在一行中打印出n!的值,否则打印“Invalid input”。 首先,知道阶乘是所有小于及等于该数的…

一.阶乘计算升级版

本题要求实现一个打印非负整数阶乘的函数。

其中n是用户传入的参数,其值不超过1000。如果n是非负整数,则该函数必须在一行中打印出n!的值,否则打印“Invalid input”。

首先,知道阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。那么我们先来个简单的阶乘计算吧。


#include<stdio.h>
int Fact(int n)
{if (n <= 1)return 1;elsereturn n * Fact(n - 1);
}
int main()
{int n;scanf("%d", &n);int ret = Fact(n);printf("%d", ret);return 0;
}

 这样,我们就用这段代码来计算一下5的阶乘吧。

我们可以发现我们成功计算了5的阶乘,但我感觉数不够大,想要计算一下100的阶乘。

 我们发现得出的结果居然是0,这明显不是100的阶乘,这是为什么呢?其实原因很明显,就是溢出了,int类型的的数据最大能表示2的16次方减1,然而100的阶乘已经比这个数大了,所以我们就无法正确输出结果,现在题目要求不超过1000,但现在100就已经不行了,我们该怎么解决他呢?

让我们来看一下代码吧! 

#include <stdio.h>void Print_Factorial(const int N)
{char a[3000] = { 0 };//设置一个存放结果的数组int l = 1;//对赋值次数的限制a[0] = 1;//将首元素设置为1if (N < 0)//如果是负数{printf("Invalid input\n");return 0;}for (int i = 2; i <= N; i++)//从2开始进行阶乘{int z = 0;for (int k = 0; k < l; k++)//对数组进行赋值{int t = i * a[k] + z;a[k] = t % 10;z = t / 10;}while (z)//得到进位的数,同时改变下一次上个代码的循环次数{a[l++] = z % 10;z /= 10;}}for (int i = l - 1; i >= 0; i--)//打印结果{printf("%d", a[i]);}
}int main()
{int N;scanf("%d", &N);Print_Factorial(N);return 0;
}

讲解 

我们先举个例子123*12=1476 

 

我们看完这个例子之后我们其实可以用这种方法来推理出他的运算方式 


假设n = 5的阶乘 5! = 1 * 2 * 3 * 4 * 5
i = 2 时 k = 0 k < (l = 1) z = 0t = i * a[0] + z = 2 * 1 + 0 = 2     a[0] = t % 10 = 2 % 10 = 2    z = t / 10 = 2 / 10 = 0
i = 3 时 k = 0 k < (l = 1) z = 0t = i * a[0] + z = 3 * 2 + 0 = 6     a[0] = t % 10 = 6 % 10 = 6    z = t / 10 = 6 / 10 = 0
i = 4 时 k = 0 k < (l = 1) z = 0t = i * a[0] + z = 4 * 6 + 0 = 24    a[0] = t % 10 = 24 % 10 = 4   z = t / 10 = 24 / 10 = 2 由于z != 0进入while循环改变逐渐改变arr[0]arr[1].....的值a[l++] = a[1] = z % 10 = 2 % 10 = 2  z = z / 10 = 2 / 10 = 0
i = 5 时 k = 0 k < (l = 2) z = 0t = i * a[0] + z = 5 * 4 + 0 = 20    a[0] = t % 10 = 20 % 10 = 0   z = t / 10 = 20 / 10 = 2t = i * a[1] + z = 5 * 2 + 2 = 12    a[1] = t % 10 = 12 % 10 = 2   z = t / 10 = 12 / 10 = 1 由于z != 0进入while循环改变逐渐改变arr[0]arr[1].....的值a[l++] = a[2] = z % 10 = 1 % 10 = 1  z = z / 10 = 1 / 10 = 0到这时循环已经结束 由于l++在多次循环之后l=3,而我们所求的结果就是我们在循环期间所改变的arr的值

 看这回我们不只成功的打印了5的阶乘,也成功打印了100的阶乘

二. 然后是几点

有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

输入格式:

输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。

输出格式:

输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

输入样例:

1120 110

输出样例:

1310

题目讲解: 

对于题目的描述,我们其实可以发现如果我们将给我们的起始时间去除上100,就是起始的小时模上100得到的就是起始的分钟,这时我们只要将起始分钟加上给我们的流逝分钟再加上小时数乘以60,所得到的就是总的分钟数,当然这时我们让总的分钟数除以60就能得到小时数,然而一天为24小时所以我们需要将小时控制在24小时之内,其实要得到它非常的简单,只需要我们将小时数模上24就可以了,当然求完小时后我们还要求剩余的分钟数,这就很简单了将总的分钟数模上60就能得到剩余的分钟数了,注意如果剩余的分钟数为单个数我们需要进行补零。

#include<stdio.h>
int main()
{int n,m,h,min,H;scanf("%d %d",&n,&m);h=n/100;min=n%100;H=h*60+min+m;printf("%d%02d",(H/60)%24,H%60);}

三.求整数段和

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

输入格式:

输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。

输出格式:

首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X

输入样例:

-3 8

输出样例: 

   -3   -2   -1    0    12    3    4    5    67    8
Sum = 30

题目讲解:

根据题目我们知道我们要先找到a到b之间的数,这我们只需要运用for循环即可,将i的初始值设为a,将循环条件设置为i<=b,并让每次循环i都加1,这样我们就成功找到了a到b之间的数,之后我们再看看的输出格式的限制他要求我们每打印5个数就要换行并且当最后一行不满5个数的时候也要进行换行。这样其实我们就可以设置一个计数器count,让每输入一个数count就加一,当count=5的时候将他进行换行处理,并且重新将count赋值为0,之后将所有的数加在一起放到sum里,但是输出还要求我们,如果最后不满5个数也要进行换行,所以在循环结束后,如果剩余的数不足5个,就说明count最后没有被重新赋值为0,我们只需要在循环外进行对count是否等于0的判断,如果不等于零就进行换行,最后在打印a到b之间数的和。

#include<stdio.h>
int main()
{int a,b;scanf("%d %d",&a,&b);int sum=0,count=0;int i,j;for(i=a;i<=b;i++){count++;printf("%5d",i);if(count%5==0){printf("\n");count=0;}sum+=i;}if(count!=0){printf("\n");}printf("Sum = %d",sum);return 0;
}

 四.爬动的蠕虫

一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?

这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。

输入格式:

输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。

输出格式:

在一行中输出蠕虫爬出井的时间,以分钟为单位。

输入样例:

12 3 1

输出样例:

11

题目讲解 

题目其实很好理解,就是一条蠕虫向上爬,每分钟能爬u寸,每次爬完之后会进行一分钟的休息同时下滑d寸。这其实就很好理解了,我们只需要设置一个变量x,如果x小于井的长度就让他加上一分钟爬的u寸,同时时间变量t也要加一,但是题目告诉我们如果爬完之后的高度并没有出井,蠕虫就要休息一分钟,并且下滑d寸,所以我们要设置一个判断如果x爬完的高度依然小于n井高,就让x-d,时间同时也加1,当然如果没有达到井上,蠕虫还要进行爬行,所以我们要将这一次的爬行放入循环中,直到蠕虫爬出井,结束循环并打印所消耗的时间。

#include<stdio.h>
int main()
{int n,d,u;scanf("%d%d%d",&n,&u,&d);int x=0,t=0;while(x<n){x+=u;t++;if(x<n){x-=d;t++;}}printf("%d",t);return 0;
}

五.龟兔赛跑

乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

输入格式:

输入在一行中给出比赛时间T(分钟)。

输出格式:

在一行中输出比赛的结果:乌龟赢输出@_@,兔子赢输出^_^,平局则输出-_-;后跟1空格,再输出胜利者跑完的距离。

输入样例:

242

输出样例:

@_@ 726

题目讲解 :

时间

乌龟

兔子

0

0

0

190

570

630

10

30

90

200

600

630

20

60

90

210

630

630

30

90

90

220

660

630

40

120

90

230

690

720

50

150

180

240

720

720

60

180

180

250

750

720

70

210

180

260

780

720

80

240

180

270

810

810

90

270

270

100

300

360

110

330

360

120

360

360

130

390

360

140

420

450

150

450

450

160

480

450

170

510

450

180

540

540

我们通过这个表格可以发现90min为一个周期0min,90min,180min,270min,每到这些时间乌龟和兔子就会相遇,并且我们发现兔子在一个周期上总是在起始时间到十分钟,时间到40分钟到之后的10分钟,时间到80到之后的10分钟,即每个周期的0-10min,40-50min,80-90min,在这些期间内兔子才会运动,而乌龟时一直在运动,所以,我们给出时间可以直接计算出乌龟所运动的路程,

而,兔子所运动的路程我们只要找到总时间在这些时间分段里总共出现了多少分钟即可,每找到一次路程就加9,当然我们要利用while循环让时间不停的前进,并在循环中设置判断条件,既然时90min一周期,只要然时间去模上90,看时间是否在0-10min,40-50min,80-90min之内,每在一次路程就加9。

#include<stdio.h>
int main()
{int tu=0,gui=0,t=0,T;scanf("%d",&T);gui=T*3;while(t<T){if((t%90>=0&&t%90<10)||(t%90>=40&&t%90<50)||(t%90>=80&&t%90<90)){tu+=9;}t++;}if(gui>tu)printf("@_@ %d",gui);else if(tu>gui)printf("^_^ %d",tu);elseprintf("-_- %d",tu);return 0;
}

http://www.yayakq.cn/news/713542/

相关文章:

  • 湖北省职业能力建设处网站wordpress 视频插件 无广告
  • 厦门网站seo哪家好google移动服务应用优化
  • 企业网站需要多少费用什么网站有做qq群排名的
  • 广州割双眼皮网站建设潜力的网站设计制作
  • 做的网站显示图片很慢wordpress分类列表插件
  • 建设部物业证书查询官方网站做图标的网站
  • 网站开发女生龙岩亿网行
  • 网站开发的程序平台百度seo关键词排名优化工具
  • 做网站所用的语言阿里巴巴网站备案
  • 辽宁高端网站建设零基础学电脑培训班
  • 中山手机网站开发网站功能开发需求分析
  • 东营网站seo服务上海软件定制
  • 网站的分析与设计怎样创建自己的网站
  • 浮梁网站建设做网站需要哪些成本
  • 创建网站服务器地址网页设计在邯郸能干什么
  • 龙岩网站建设知末网室内设计效果图
  • 吕梁建站公司wap卖料建站系统
  • 京美建站有代码吗义安区住房和城乡建设局建网站
  • php网站建设实训报告app软件大全下载
  • 网站顶部滑动展示的div层提示效果南平购物网站开发设计
  • 网站服务器参数水溶花边外发加工网
  • 网站建设 深圳网站平台建设什么意思
  • 温州网站制作价格仿制网站的软件
  • 住房和城乡建设部网站诚信评价机关网站建设需求文档
  • 开县网站制作驻马店做网站优化
  • app开发步骤百度seo 站长工具
  • 去国外做非法网站吗广州效果图制作
  • 免费的微网站制作重庆永川网站建设
  • 哈尔滨网站建设效果企业商标设计图案免费
  • 做网站纸张大小html5结构的网站