
算法竞赛入门经典系列
The_Dawn_Star
这个作者很懒,什么都没留下…
展开
-
习题1-3,连续合
输入正整数n,输出1+2+…+n的值,不准使用循环结构语句(for、(do)while、goto)。#include #include using namespace std;int main(int argc, char *argv[]){ int n; scanf("%d",&n); printf("%d",(1+n)*n/2); system("原创 2013-02-06 17:38:53 · 331 阅读 · 0 评论 -
习题3-2,单词的长度
输入若干个单词,输出它们的平均长度。单词只包含大写字母和小写字母,用一个或多个空格隔开。这里把单词的最大长度定成了100,(应该没有什么单词长度超过一百吧...)#include #include #include using namespace std;const int MAXN=100;char word[MAXN];int main(int argc, char *原创 2013-02-07 15:51:26 · 1738 阅读 · 0 评论 -
习题3-5,旋转
输入一个n*n字符矩阵,把它左旋90°后输出。这题主要是找出旋转前后坐标的关系,在草稿上找一下规律就行了。这里我第一次用了动态分配内存,其实直接定义最大数组也是可以的。#include #include using namespace std;int main(int argc, char *argv[]){ system("color 0a"); int n原创 2013-02-07 16:04:26 · 335 阅读 · 0 评论 -
习题3-3,乘积的末三位
输入若干个整数(可以是整数、负数、或者零),输出它们的乘积的末三位。这些整数会混入一些由大写字母组成的字符串,你的程序应当忽略它们。这题的难点无非就是数字的提取了,用getchar()函数一个个判断即可。#include #include #include using namespace std;int main(int argc, char *argv[]){ sys原创 2013-02-07 15:55:36 · 581 阅读 · 0 评论 -
例题5.4.3,果园里的树
果园里的树排列成矩阵,他们的x和y坐标均是1~99的整数。输入若干个三角形,一次统计每一个三角形内部和边界上共有多少棵树。样例输入:1.5 1.5 1.5 6.8 6.8 1.510.7 6.9 8.5 1.5 14.5 1.5样例输出:1517这题尤其要注意的是浮点误差,注意使用小技巧。#inclu原创 2013-02-13 20:18:55 · 626 阅读 · 0 评论 -
习题3-8,手机键盘
输入一个由小写字母组成的英文单词,输出用手机默认英文输入法的敲键序列。例如要打出pig这个单词,需要按1次p,3次g,1次g,记为p1g3g1。(原题题意不清,这里有修改)这里用常量数组是最简单的。#include #include #include using namespace std;//本题题意不清,本代码仅输出按键第一个字母按的次数 const char原创 2013-02-07 16:11:47 · 590 阅读 · 0 评论 -
习题3-7,进制转换2
输入基数b,(2#include #include #include using namespace std;const int MAXN=100;int p[MAXN];int main(int argc, char *argv[]){ int b=10,n=0,x,s,t=1; scanf("%d%d",&b,&n); while( n!=原创 2013-02-07 16:07:30 · 748 阅读 · 0 评论 -
习题3-6,进制转换1
输入基数b,(2#include #include using namespace std;const int MAXN=100;int p[MAXN];int main(int argc, char *argv[]){ int b=10,n=0,m=0; scanf("%d%d",&b,&n); while( n!=0 ) {原创 2013-02-07 16:06:32 · 380 阅读 · 0 评论 -
习题3-4,计算器
编写程序,读入一行恰好包含一个加号、减号、乘号、或除号的表达式,输出它的值。两个运算数均为不超过100的非负整数。运算数和运算符可以紧挨着,也可以用一个或多个空格、TAB隔开。行首末尾均可以有空格。提示:选择适当的输入方法可以将问题简化。样例输入:1+1样例输出:2样例输入:2 -5样例输出:-3样例输入:0 * 1982 样例输出:0#原创 2013-02-07 16:00:36 · 627 阅读 · 0 评论 -
例题7.1.2,最大乘积
#include using namespace std;int s[20];int main(){ int n; cin>>n; for( int i=0 ; i<n ; ++i ) cin>>s[i]; long long max=s[0]; long long t; for( int i=0 ; i<n ; ++i原创 2013-07-18 16:31:40 · 342 阅读 · 0 评论 -
例题7.1.3,分数拆分
前端输出个数暂时没思路...先放后端...#include using namespace std;int main(){ int k,count=0; cin>>k; for( int y=k+1 ; y<=2*k ;++y ) { int x; x=k*y; if( x%(y-k)==0 )原创 2013-07-18 17:01:12 · 432 阅读 · 0 评论 -
例题7.1.1,除法
有点长,不知道有没有更简洁的代码。#include using namespace std;int s[10]={0};bool cheak(){ for( int i=0 ; i<10 ; ++i ) { if( s[i] > 1 )return 0; } return 1;}int main(){ int原创 2013-07-18 16:16:42 · 482 阅读 · 0 评论 -
例题7.1.4,双基回文数
#include using namespace std;int p[100];int main(){ int n; cin>>n; while( 1 ) { n++; int m; int ok=0; for( int b=2 ; b<=10 ; ++b )原创 2013-07-22 14:33:50 · 387 阅读 · 0 评论 -
习题2-5,统计
输入一个正整数n,然后读取n个正整数a1,a2,...,an,最后读取一个正整数m。统计a1,a2,...,an中有多少个整数的值小于m。#include using namespace std;const int MAXN=10000;int p[MAXN];int main(){ int n,i=0,m,x=0; cin>>n; for( i = 0原创 2013-02-06 18:41:51 · 388 阅读 · 0 评论 -
习题1-4,正弦和余弦
输入正整数n(n#include #include #include using namespace std;int main(int argc, char *argv[]){ int n; scanf("%d",&n); printf("正弦:%.4f\n余弦:%.4f\n",sin(n),cos(n)); system("pause");原创 2013-02-06 17:39:18 · 436 阅读 · 0 评论 -
习题1-6,偶数
输入一个整数,判断它是否为偶数。如果是,输出”yes”,否则输出”no”。#include #include #include using namespace std;int main(int argc, char *argv[]){ int n; scanf("%d",&n); if( n%2==1 )printf("奇数\n");else printf原创 2013-02-06 17:40:26 · 406 阅读 · 0 评论 -
习题1-1,平均数
输入三个整数,输出它们的平均值,保留三位小数。#include #include using namespace std;int main(int argc, char *argv[]){ int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("%.3f",(a+b+c)/3.0); system("pause");原创 2013-02-06 17:34:39 · 316 阅读 · 0 评论 -
习题2-1,位数
输入一个不超过10^9的正整数,输出他的位数。不准使用任何数学函数。#include using namespace std;int main(){ int n,m=1; cin>>n; while( (n/=10)!=0 ) m++; cout<<m<<endl; system("pause"); retu原创 2013-02-06 18:08:26 · 282 阅读 · 0 评论 -
习题2-4,倒三角形
输入正整数n#########0#######00#####000###0000#(其中0为空格)#include using namespace std;int main(){ int n,i,j; cin>>n; for( i = n ; i >= 0 ; --i ) { for( j=0 ; j<n-i ; +原创 2013-02-06 18:31:47 · 356 阅读 · 0 评论 -
习题2-6,调和级数
输入正整数n,输出H(n)=1+1/2+1/3+...+1/n的值,保留三位小数。例如n=3时答案为1.833。#include using namespace std;int main(){ int n,i; double s; cin>>n; for( i = 1 ; i <= n ; ++i ) s+=1.0/i; printf("原创 2013-02-06 18:46:10 · 542 阅读 · 0 评论 -
习题2-8,子序列的和
输入两个整数n其实呢,所谓的陷阱就是数据溢出了,定义一个大点的数据类型就ok了。#include using namespace std;int main(){ int m,n,i; double s=0; cin>>n>>m; for( i = n ; i <= m ; ++i ) s+=1.0/i/i; printf("%.5lf原创 2013-02-06 19:05:20 · 355 阅读 · 0 评论 -
习题1-7,打折
一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输入需要支付的金额,保留两位小数。#include #include #include using namespace std;int main(int argc, char *argv[]){ int n,s; scanf("%d",&n); s=n*95; if( s>=300 )p原创 2013-02-06 17:41:17 · 823 阅读 · 0 评论 -
习题2-2,水仙花数
输出100~999中的所有水仙花数。若3位数ABC满足ABC=A^3+B^3+C^3,则称其为水仙花数。#include using namespace std;int main(){ int i,a,b,c; for( i = 100 ; i <= 999 ; ++i ) { a=i%10; b=(i/10)%10;原创 2013-02-06 18:15:18 · 434 阅读 · 0 评论 -
习题2-7,近似计算
计算π/4=1-1/3+1/5-1/7+...,直到最后一项小于10^-6。#include using namespace std;int main(){ int i; double s=1,t=1,x; for( i = 3 ; ; i+=2 ) { x=1.0/i; if( x*1000000<1 )原创 2013-02-06 18:55:56 · 516 阅读 · 0 评论 -
习题2-10,排列
用1,,2,3,4,5,...,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。输出所有解。提示:不必太动脑筋。啊~是啊,不必太动脑筋,但动动手还是在所难免的——大家一定要多用复制粘贴啊#include using namespace std;int main(){ int a,b,c,d,e,f,g,h,i;原创 2013-02-06 19:55:51 · 320 阅读 · 0 评论 -
习题1-10,年份
输入年份,判断是否为闰年。如果是,输出”yes”,否则输出”no”。提示:四年一闰;百年不闰,四百年再闰。#include #include #include using namespace std;int main(int argc, char *argv[]){ int n; scanf("%d",&n); if( (n%4==0&&n%100!=0)|原创 2013-02-06 17:42:44 · 355 阅读 · 0 评论 -
习题1-8,绝对值
输入一个浮点数,输出他的绝对值,保留两位小数。不准用数学函数。#include #include #include using namespace std;int main(int argc, char *argv[]){ double x; scanf("%lf",&x); if( x < 0 ) x=-x; printf("%.2f",原创 2013-02-06 17:41:45 · 512 阅读 · 0 评论 -
习题1-5,距离
输入4个浮点数x1,y1,x2,y2,输出平面坐标系中点(x1,y1)到点(x2,y2)的距离。#include #include #include using namespace std;int main(int argc, char *argv[]){ int x1,x2,y1,y2; scanf("%d%d%d%d",&x1,&y1,&x2,&y2);原创 2013-02-06 17:39:59 · 511 阅读 · 0 评论 -
习题1-2,温度
输入华氏度温度f,输出对应的摄氏度温度c,保留三位小数。提示:c=5(f-32)/9。#include #include using namespace std;int main(int argc, char *argv[]){ int f; scanf("%d",&f); printf("%.3f",5*(f-32)/9.0); system("pa原创 2013-02-06 17:38:19 · 497 阅读 · 0 评论 -
习题1-9,三角形
输入三角形三边长度(均为正整数),判断它是否可以组成直角三角形。如果是,输出”yes”,否则输出”no”,如果不能构成三角形,输出”not atriangle”。#include #include #include using namespace std;int main(int argc, char *argv[]){ int a,b,c,x,y,z; scan原创 2013-02-06 17:42:06 · 417 阅读 · 0 评论 -
习题2-9,分数化小数
输入正整数a,b,c,输出a/b的小数小数形式,精确到小数点后c位。a,b这一题的难点是c的范围(最大能到100),而我们所知的最大数据类型double也才只能精确到17位,所以只有一种选择:自定义高精度运算。但高精度运算是后面几章的内容,怎么会出现在这里呢?还希望看到的朋友们帮忙回答,是不是我想落了什么简单的方法。#include using namespace std;int原创 2013-02-06 19:32:17 · 1019 阅读 · 2 评论