「算法竞赛入门经典 第二版」习题解答 1、2章

1-1 平均数:输入3个整数,输出他们的平均值,保留3位小数

#include <stdio.h>
int main()
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    double d=(double)(a+b+c);
    printf("%.3lf\n",d/3.0);
    return 0;
}

1-2 温度:输入华氏温度 f ,输出对应的摄氏度 c,保留3位小数。提示:c=5(f-32)/9

#include <stdio.h>
int main()
{
    double f;
    double c;
    scanf("%lf",&f);
    c = 5*(f-32)/9.0;
    printf("%.3lf\n",c);
    return 0;
}

1-3 连续和:输入正整数 n,输出1+2+3+...+n的值。提示:目标是解决问题,而不是练习编程

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d\n",(n*(1+n))/2);
    return 0;
}

1-4 正弦和余弦:输入正整数 n(n<360),输出n度的正弦余弦数值。提示:用数学函数

#include <stdio.h>
#include <math.h>
#define PI acos(-1.0)
int main()
{
    int n;
    scanf("%d",&n);
    printf("%lf\n",sin((PI*n)/180));
    printf("%lf\n",cos((PI*n)/180));
    return 0;
}

1-5 打折:一件衣服 95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位元),保留两位小数

#include <stdio.h>
int main()
{
    int n;
    double a;
    scanf("%d",&n);
    a=n*95.0;
    if(a<300)
        printf("%.2lf\n",a);
    else
        printf("%.2lf\n",a*0.85);
    return 0;
}

1-6 三角形:输入三角形 3 条边长度值(均为正整数),判断是否能为直角三角形的3个边长。如果可以,则输出yes,不能输出no,如果无法构成三角形,则输出 not a triangle

#include <stdio.h>
int main()
{
    int a,b,c,max;
    scanf("%d%d%d",&a,&b,&c);
        max = a>b?a:b;
        max = max>c?max:c;
        if (max > a+b+c-max)
        {
            printf("not a triangle\n");
            return 0;
        }
        if (a*a == b*b+c*c || b*b == a*a+c*c || c*c == a*a+b*b )
            printf("yes\n");
        else
            printf("no\n");
    return 0;
}    

1-7 年份:输入年份,判断是否为润年,如果是,输出yes,否,输出no。提示:简单的除以4是不够的

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    if(n%4==0 && n%100!=0 || n%400==0)
        printf("yes\n");
    else
        printf("no\n");
    return 0;
}

2-1 水仙花数:输出100~999中的所有水仙花数,若3位数ABC满足ABC=A3+B3+C3则称其为水仙花数,例如 153 = 13+53+33,所以153是水仙花数

#include <stdio.h>
int main()
{
    int a,b,c;
    for(int i=100;i<=999;i++)
    {
        a=i/100;
        b=i/10%10;
        c=i%10;
        if(i==a*a*a+b*b*b+c*c*c)
            printf("%d\n",i);
    }
    return 0;
}

2-2 韩信点兵:相传韩信才智过人,从不直接点清自己军队的人数,只要让士兵先后三人一排、五人一排、七人一排的变换队形,而他每次只掠过一眼队伍尾排的人数就知道总人数了。输入包括多组数据,每组数据包含3个非负整数a,b,c(a<3,b<5,c<7)输出总人数的最小值(或报告无解),已知总人数不小于10,不超过100。

#include <stdio.h>
int main()
{
    int i,a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    for(i=10;i<=100;i++)
    {
        if(i%3==a && i%5==b && i%7==c)     {
            printf("Case 1: %d\n",i);       break;     }
    }
    if(i==101)
        printf("Case 2: No answer\n");
    return 0;
}

2-3 倒三角形:输入正整数n<=20,输出一个n层倒三角形。

2-4 子序列的和:输入两个正整数n<m<106,输出1/n2+1/(n+1)2+...+1/m2,保留5位小数。输入包含多组数据,结束标记为 n=m=0 提示:本题有陷阱

2-5 分数化小数:输入正整数a,b,c输出a/b的小数形式,精确到小数点后c位。a,b<=106,c<=100.输入包含多组数据,结束标记为 a=b=c=0

2-6 排列:用1,2,3,...,9组成3个三位数 abc,def,ghi 每个数字恰好使用一次,要求abc:def:ghi=1:2:3.按照"abc def ghi"格式输出所有解,每一行一个解。提示:不必太动脑筋

时间: 2024-11-04 17:24:54

「算法竞赛入门经典 第二版」习题解答 1、2章的相关文章

《算法竞赛入门经典第二版》 P35 习题2-4 子序列的和(subsequence)

/* <算法竞赛入门经典第二版> P35 习题2-4: 输入两个正整数 n < m < 10^6,输出 (1/n)^2 + 1/(n+1)^2 +……+ 1/m^2,保留5位小数. 输入包含多组数据,结束标志为 m=n=0. 有错欢迎指出^_^ */ #include<stdio.h> int main() { int m,n,i,j=1; while(scanf("%d%d",&m,&n) != EOF) { double sum

算法竞赛入门经典第二版第三章习题

写这个的原因是看到一位大神的习题答案总结,于是自己心血来潮也想写一个这个,目的主要是督促自己刷题吧,毕竟自己太弱了. 习题3-1 得分 UVa 1585 大致就是设置一个变量记录到当前为止的连续的O的数量,碰到X就变0,水题. #include<stdio.h> #include<ctype.h> #include<string.h> char s[90]; int main(void) { int length,n,sum,num; scanf("%d&qu

算法竞赛入门经典 第二版 1-3答案

挂完月考又滚回来玩OI了,对于书中前几章例题,没有答案还是比较慌,找了许久也没用什么完全符合的.其中不错的有一篇写下来看看 http://wenku.baidu.com/link?url=Ofu2LHxnKm838nW3XtLBX9cGQcgOAqPIgqdg0vhOc9X0M4cSWnL_yCjd_DF3O2k9O4kAHfTyHP6nxFr2wiGBM7n6Wj3AL2LLoP06ecNEGQC 不得不吐槽这文库的下载要求,没心思去弄.这库中答案有少许偏差,不过还在接受范围之内. 对于一些,

算法竞赛入门经典第二版 蛇形填数 P40

#include<bits/stdc++.h> using namespace std; #define maxn 20 int a[maxn][maxn]; int main(){ int n,x,y,tot=0; cin>>n; memset(a,0,sizeof(a)); tot=a[x=0][y=n-1]=1; while(tot<n*n){ while(x+1<n&&!a[x+1][y]) a[++x][y]=++tot; while(y-1&

算法竞赛入门经典第二版 竖式问题 P42

#include<bits/stdc++.h> using namespace std; int inset(char *s,int num) { //判断数字是否在数字集中 int len=strlen(s),i,tmp; while(num) { tmp=num%10; //取末尾数字 for(i=0; i<len; i++) { if(s[i]-'0'==tmp) //如果在里面,则跳出for循环 break; } if(i==len)//当i=len的时候,表示已经搜遍s,s里面

算法竞赛入门经典第二版 随笔1

while( scanf ("%d",&x ) ==1) 这里scanf返回的是成功输入的变量个数,当输入结束的时候,scanf函数无法再次读取x,将返回0 比较大的数组应该尽量声明在main函数外,否则程序可能无法运行 关于c语言的数组:如果要从数组a复制k个元素到b,可以这样做:memcpy(b,a,sizeof(int)*k).当然,如果数组a和b都是浮点型,复制时要写成memcpy(b,a,sizeof(double)*k).另外需要注意的是,使用memcpy函数要包含

刘汝佳算法竞赛入门经典 第二单元习题答案自编

欢迎交流讨论! @2-1 #include <fstream> using namespace std; ifstream fin("aplusb.in"); ofstream fout("aplusb.out"); int main(){ int n; while(fin>>n){ int count = 0; //计算位数 while(n){ count++; n /= 10; } fout << count <<

刘汝佳算法竞赛入门经典 第四单元习题答案自编

第四章小问题集锦 以上是我这一章课后题思考的流程,有错误和不严谨地方请直接指出! 1.解方程组 任务一:使用assert宏,解不唯一时异常退出 #include <stdio.h> //x=(ce-bf)/(ae-bd), y=(cd-af)/(bd-ae) int solve(double a, double b, double c, double d, double e, double f){ assert(a*e != b*d); ... } int main(){ double a,b

《算法竞赛入门经典(第二版)》pdf

下载地址:网盘下载 内容简介  · · · · · · <算法竞赛入门经典(第2版)>是一本算法竞赛的入门与提高教材,把C/C++语言.算法和解题有机地结合在一起,淡化理论,注重学习方法和实践技巧.全书内容分为12 章,包括程序设计入门.循环结构程序设计.数组和字符串.函数和递归.C++与STL入门.数据结构基础.暴力求解法.高效算法设计.动态规划初步.数学概念与方法.图论模型与算法.高级专题等内容,覆盖了算法竞赛入门和提高所需的主要知识点,并含有大量例题和习题.书中的代码规范.简洁.易懂,不