算法竞赛入门第一章

算法竞赛入门经典第一章


计算并输出1+2的值

#include<bits/stdc++.h>
using namespace std;
int main(void){
	printf("%d\n",1+2);
	return 0;
} 

实验1:修改程序1-1,输出3-4的结果是−1

实验2:修改程序1-1,输出5*6的结果是30

实验3:修改程序1-1,输出8/4的结果是2

实验4:修改程序1-1,输出8/5的结果是1

计算并输出8/5的值,保留小数点后1位

#include<bits/stdc++.h>
using namespace std;
int main(void){
	printf("%.1f\n",8.0/5.0);
	return 0;
} 

实验5:把%.1f中的数字1改成2,结果如何?结果是1.60。
能猜想出“1”的确切意思吗?占位占位。
如果把小数点和1都删除,%f的含义是什么?以浮点数的形式输出以浮点数的形式输出。

实验6:字符串%.1f不变,把8.0/5.0改成原来的8/5,结果如何?0.0

实验7:字符串%.1f不变,改成原来的%d,8.0/5.0不变,结果如何?−1717986918。

两数交换的方法总结

#include<bits/stdc++.h>
using namespace std;
int main(void){
	int a,b;
	cin >> a >> b;
	swap(a,b);
	cout<<a<<" "<<b<<endl;
	int c,d;
	cin >> c >> d;
	c = c^d;
	d = c^d;
	c = c^d;
	cout<<c<<" "<<d<<endl;
	int e,f;
	cin >> e >> f;
	e = e+f;
	f = e-f;
	e = e-f; 
	cout<<e<<" "<<f<<endl;
	return 0;
} 

数据类型

实验A1:表达式11111*11111的值是多少?是123454321。把5个1换成6个1呢?类型溢出,需要改成结果是int类型溢出,需要改成longlong结果是12345654321。换成9个呢?是12345678987654321。

实验A2:把实验A1中的所有数换成浮点数,结果如何?结果不是正确的。

实验A3:表达式sqrt(-10.0)的值是多少?nan。尝试用各种方式输出,在计算的过程中系统会报错吗?不会不会。

实验A4:表达式1.0/0.0,0.0/0.0的值是分别多少?和inf和nan尝试用各种方式输出,在计算的过程中系统会报错吗?不会不会。

实验A5:表达式1/0的值是多少?在计算的过程中会出错吗?,不能做分母Waring,0不能做分母。

输入输出实验

#include<bits/stdc++.h>
using namespace std;
int main(void){
	int a,b;
	scanf("%d%d",&a,&b);
	printf("%d %d\n",a,b);
	return 0;
} 

实验B1:在同一行中输入12和2,并以空格分隔,是否得到了预期的结果?得到了

实验B2:在不同的两行中输入12和2,是否得到了预期的结果?得到了

实验B3:在实验B1和B2中,在12的前面和2的后面插入大量的空格或水平制表符(TAB),甚至插入一些空行。结果同B1和B2。

实验B4:把2换成字符s,重复实验B1~B3。结果是和和和12和1

习题

平均数

#include<bits/stdc++.h>
using namespace std;
int main(void){
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	printf("%.3lf\n",(a+b+c)/3.0);
	return 0;
}
温度

#include<bits/stdc++.h>
using namespace std;
int main(void){
	int f;
	scanf("%d",&f);
	printf("%.3lf\n",5*(f-32)/9.0);3
	return 0;
} 
连续和

#include<bits/stdc++.h>
using namespace std;
int main(void){
	int n;
	cin >> n;
	cout<<n*(n+1)/2<<endl;
	return 0;
}
正弦和余弦和

/*
C++中cos,sin,asin,acos这些三角函数操作的是弧度,而非角度,
你需要把角度转化为弧度.
弧度=角度*Pi/180;
*/
#include<bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
int main(void){
	int n;
	cin >> n;
	printf("%lf %lf\n",sin(n*pi/180),cos(n*pi/180));
	return 0;
}
打折

#include<bits/stdc++.h>
using namespace std;
int main(void){
	int n;
	cin >> n;
	if(n*95>=300) printf("%.2lf\n",n*95*0.85);
	else printf("%.2lf\n",n*1.0*95);
	return 0;
}
三角形

#include<bits/stdc++.h>
using namespace std;
int main(void){
	int a,b,c;
	cin >> a >> b >> c;
	int sum = a+b+c;
	int maxx = max(a,max(b,c));
	int minn = min(a,min(b,c)); 
	int second = sum-maxx-minn;
	if(sum-maxx>maxx){
		if(maxx*maxx==minn*minn+second*second) cout<<"yes"<<endl;
		else cout<<"no"<<endl;
	}else cout<<"not a triangle"<<endl;
	return 0;
}
年份

#include<bits/stdc++.h>
using namespace std;
int main(void){
	int n;
	cin >> n;
	if(n%4==0&&n%100!=0||n%400==0) cout<<"yes"<<endl;
	else cout<<"no"<<endl;
	return 0;
}

问题

问题1:int型整数的最小值和最大值是多少?到−2147483648到2147483647

问题2:doble型浮点数能精确到多少位小数?

本身值得商榷,double型浮点数实际精度为1516位,即能精确到1516位有效数字​。

问题3:double型浮点数最大正数值和最小正数值分别是多少?

−21024到21024,即−1.79∗10308到+1.79∗10308
问题4:逻辑运算符号“&&”、“||”和“!”(表示逻辑非)的相对优先级是怎样的?也就是说,a&&b||c应理解成(a&&b)||c还是a&&(b||c),或者随便怎么理解都可以?

优先级从高到低顺序为!>&&>||

if(a)if(b)x++;else y++的确切含义是什么?这个else应和哪个if配套?有没有办法明确表达出配套方法?

else应该与最近的没有else配对的if进行匹配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算法竞赛入门经典——训练指南》代码仓库 例题代码 限于篇幅,书上并没有给出所有例题的代码,这里给出了所有例题的代码,并且改进了书上的一些代码。 第一章 32题 38份代码 第二 28题 30份代码 第三 22题 23份代码 第四 19题 21份代码 第五 34题 39份代码 第六 24题 26份代码 共159题 177份代码 为了最大限度保证代码风格的一致性,所有例题代码均由刘汝佳用C++语言编写。 所有代码均通过了UVa/La的测试,但不能保证程序是正确的(比如数据可能不够强),有疑问请致信rujia.liu@gmail.com,或在googlecode中提出: http://code.google.com/p/aoapc-book/ [最新更新] 2013-04-23 增加字符串中例题10(UVa11992 Fast Matrix Operations)的另一个版本的程序,执行效率较低,但更具一般性,可读性也更好 2013-04-22 增加字符串部分“简易搜索引擎”代码,可提交到UVa10679 2013-04-13 修正Treap中优先级比较的bug(原来的代码实际上是在比较指针的大小!),加入纯名次树代码 2013-03-31 修正UVa1549标程的bug,即buf数组不够大。 增加线段树部分“动态范围最小值”的完整代码 2013-03-23 修正UVa10054标程的bug,即没有判断是否每个点的度数均为偶数。UVa数据已经更新 LA3401修正了代码和文字不一致的问题 UVa11270增加了答案缓存 2013-03-21 增加线段树部分中两个经典问题的完整代码:快速序列操作I和快速序列操作II 2013-02-28 补全所有159道例题的代码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值