杭电OJ1001 C
杭电OJ1001
杭电1001题,计算从1加到n,一个等差数列。题目如下:
- 有两种算法,一种是从1加到n,每次循环之后sum要记得清空,赋值为0,我就在这一点上出错了,输出的值总是差一点。
代码如下:
#include<stdio.h>
int main (void)
{int i=0,sum=0,n;while(scanf("%d",&n)!=EOF){for(i=1;i<=n;i++){sum+=i;}printf("%d\n\n",sum);sum=0;}return 0;
}
- 第二种算法,就是上小学时听的那个关于高斯的故事:
高斯7岁那年开始上学。10岁的时候,他进入了学习数学的班级,这是一个首次创办的班,孩子们在这之前都没有听说过算术这么一门课程。数学教师是布特纳,他对高斯的成长也起了一定作用。
一天,老师布置了一道题,1+2+3······这样从1一直加到100等于多少。
高斯很快就算出了答案,起初高斯的老师布特纳并不相信高斯算出了正确答案:"你一定是算错了,回去再算算。”高斯非常坚定,说出答案就是5050。高斯是这样算的:1+100=101,2+99=101······50+51=101。从1加到100有50组这样的数,所以50X101=5050。
布特纳对他刮目相看。他特意从汉堡买了最好的算术书送给高斯,说:“你已经超过了我,我没有什么东西可以教你了。”接着,高斯与布特纳的助手巴特尔斯建立了真诚的友谊,直到巴特尔斯逝世。他们一起学习,互相帮助,高斯由此开始了真正的数学研究。
也就是正常人算这种题的算法:首尾相加乘以个数除以二。但是不能直接用等差数列求和公式,因为题中有这么一句:
You may assume the result will be in the range of 32-bit signed integer.
要求数据不能超过三十二位,那么n很大的时候n*(n+1)会溢出,造成Wrong Answer。我就是在本地运行的好好的,结果上OJ就WA,后来才发现是这么个问题。
先判断奇偶,然后把n和n+1中偶数的一方除以二,再相乘,这样就不会溢出了,顺利AC。
代码如下:
#include<stdio.h>
int main (void)
{int sum,n;while(scanf("%d",&n)!=EOF){if(n%2==0){sum=n/2*(n+1);}else{sum=(n+1)/2*n;}//sum = (1 + n) * n / 2;会溢出printf("%d\n\n",sum);sum=0;}return 0;
}
杭电OJ1001 C相关推荐
- 【杭电ACM】1097 A hard puzzle
[杭电ACM]1097 A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid=1097 先用int手写了算法结果竟然wrong answer ...
- 【ACM】杭电OJ 1106 函数atoi
函数atoi是把字符串转化成整数的函数,头文件为 #include "stdlib.h" e.g. 运行环境:Dev-C++ 5.11 杭电1106 调用了sort函数,运行的时间 ...
- 【ACM】杭电OJ 2037
题目链接:杭电OJ 2037 先把b[i]进行排序,然后,b[i]与a[i+1]进行比较. #include <iostream> #include <cstdio> #inc ...
- 【ACM】杭电OJ 2020(排序)
题目链接:杭电OJ 2020 排序可以有冒泡排序,选择排序,或者直接调用函数. 下面是选择排序: #include <stdio.h> #include <math.h> in ...
- 【ACM】杭电OJ 2018
题目链接:杭电OJ 2018 从n>4开始,每一年的牛的数量=前一年的牛的数量+三年前的牛的数量 问:为什么是三年前? 答:假设三年前有一头小牛出生,出生的那一年即为第一年,到了第四年,即三年后 ...
- 【ACM】杭电OJ 1005
题目链接:杭电OJ 1005 超时代码如下(而且开辟的数组空间大小不够): #include <stdio.h> int m[100000]; int f(int n,int a,int ...
- 【ACM】杭电OJ 1004
题目链接:杭电OJ 1004 运行环境:Dev-C++ 5.11 思路: 先把先把num数组全部赋值为1:第一个颜色单独输入,从第二个开始,需要与前面的进行比较,如果前面有相同的颜色,则在目前的nu ...
- 【ACM】杭电OJ 2012。
题目链接:杭电OJ 2012 思路很简单,但是有一种高效算法显示编译错误,不知道为什么 运行环境:VS2017 AC代码: #include <stdio.h> #include < ...
- 【ACM】杭电OJ 1003。
运行环境VS2017 题目链接:杭电OJ 1003 主要思想是: 用d[i]来存放前i项中最大的和,得到end,然后再倒推,得起始的位置begin 然而在程序42行的疑问,大家可以讨论一下吗???? ...
最新文章
- plsql 无法解析指定的连接标识符_Java方法加载、解析、存储、调用
- java socket send_java socket编程
- 09.MyBatis的逆向工程
- fedora 27 mysql_无法在Fedora27上的Python2 virtualenv中使用mysqldb
- AIR中用户离开状态和返回状态
- C#写爬虫,版本V2.1
- java xml开发_JavaWeb开发(XML简介)---3
- 以色列Aladdin HASP SRM(AES-128)加密狗破解经验分享
- 关于HTTP GZIP解压问题
- 微信公众号文章排版php,微信内容排版工具总结
- python柱状图颜色_Python 绘制 柱状图
- Null(空值)和 Undefined(未定义)
- MQ如何快速实现流量削峰填谷
- 计算机系统原理之程序是怎么运行的
- 奇异值分解的物理意义
- 渗透测试工具篇——sqlmap
- uva 10859 放置街灯树形dp
- 【应用实例】基于单片机的激光相位测距仪
- 默认网络设备流量控制
- allow control allow origin_热分析/红外光谱联用的数据分析方法 第7部分 在Origin软件中三维红外光谱图的作图方法...