算法竞赛入门经典_第二章:循环结构程序设计_上机练习_MyAnswer
习题2-1 位数
输入一个不超过109的正整数,输出它的位数。例如12735的位数是5。请不要使用任何数学函数,只用四则运算和循环语句实现。
#include<stdio.h>
int main(void)
{
int n;
int digit = ;
scanf("%d",&n); while(n)
{
n = n / ;
digit++;
} printf("%d\n", digit);
return ;
}
习题2-2 水仙花数
输出100~999中的所有水仙花数。若3位数ABC满足ABC = A3 + B3 + C3,则称其为水仙花数。例如153 = 13 + 53 + 33,所以153是水仙花数。
#include<stdio.h>
int main(void)
{
int a, b, c, i; for(i = ; i < ; i++)
{
a = i / ;
b = i / - a * ;
c = i % ;
if(i == a*a*a + b*b*b + c*c*c)
printf("%d\n", i);
} return ;
}
// 输出结果: 153 370 371 407
习题2-3 韩信点兵
相信韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c,表示每种队形排尾的人数(a < 3,b < 5,c < 7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100。
样例输入:2 1 6 样例输出:41
样例输入:2 1 3 样例输出:No answer
#include<stdio.h>
int main(void)
{
int a, b, c, i;
scanf("%d%d%d", &a, &b, &c); for(i = ; i <= ; i++)
{
if(i% == a && i% == b && i% == c) // 不清楚运算符优先级的最好用()括起来
{
printf("%d", i);
break;
}
} if(i == )
printf("No answer\n");
return ;
}
习题2-4 倒三角形
输入正整数n ≤ 20,输出一个n层的倒三角形。例如n = 5时输出如下:
#########
#######
#####
###
#
#include<stdio.h> // 找规律题
int main(void)
{
int n, i, j;
scanf("%d", &n); for(i = ; i < n; i++)
{
for(j = i; j > ; j--)
printf(" ");
for(j = ; j <= *(n-i)-; j++)
printf("#"); printf("\n");
} return ;
}
习题2-5 统计
输入一个正整数n,然后读取n个正整数a1,a2,...,an,最后再读一个正整数m。统计a1,a2,...,an,中有多少个整数的值小于m。提示:如果重定向和fopen都可以使用,哪个比较方便?
#include<stdio.h>
int main(void)
{
// 没有采用重定向的方式,因为用这种方式,我不知道如何二次打开一个文件。
// freopen("E:/desktop/input.txt", "r", stdin);
// freopen("E:/desktop/output.txt", "w", stdout); FILE * fin;
FILE * fout; fin = fopen("E:/desktop/input.txt", "rb"); // 存放在桌面上
fout = fopen("E:/desktop/output.txt", "wb"); int n, number, m;
int count = ;
fscanf(fin, "%d", &n); while(n--)
{
fscanf(fin, "%d", &number);
} fscanf(fin, "%d", &m); rewind(fin); // 文件指针重新指向文件开头 fscanf(fin, "%d", &n);
while(n--)
{
fscanf(fin, "%d", &number);
if(number < m)
count++;
} fprintf(fout, "%d\n", count); fclose(fin);
fclose(fout);
return ;
}
习题2-6 调和级数
输入正整数n,输出H(n) = 1 + 1/2 + 1/3 + ... + 1/n 的值,保留3位小数。例如 n = 3时答案为1.833。
#include<stdio.h>
int main(void)
{
int n, i;
double sum = ;
scanf("%d", &n); for(i = ; i <= n; i++)
{
sum += 1.0 / i;
} printf("%.3lf\n", sum); return ;
}
习题2-7 近似计算
计算π/4 = 1 - 1/3 + 1/5 - 1/7 +...,直到最后一项小于10-6。
#include<stdio.h>
#include<math.h>
int main(void)
{
int n = ;
double sum = ; while()
{
sum += 1.0 / n;
n = n > ? n+ : n-;
n = -n;
if(fabs(1.0/n) < 1E-)
{
break;
}
} printf("%lf\n", sum);
return ;
}
习题2-8 子序列的和
输入两个正整数 n < m < 106,输出 1/n2 + 1/(n+1)2 +...+ 1/m2,保留5位小数。例如 n = 2,m = 4时答案是0.42361;n = 65536,m = 655360时答案为0.00001。注意:本题有陷阱。
#include<stdio.h>
int main(void)
{
int m, n, i;
double sum = ; scanf("%d%d", &n, &m);
for(i = n; i <= m; i++)
{
// 两种方式皆可防止整形溢出
// sum += 1.0 /( (long long int)i*i); sum += 1.0 / i / i;
} printf("%.5lf\n", sum); return ;
}
习题2-9 分数化小数
输入正整数a,b,c,输出 a / b 的小数形式,精确到小数点后c位。a,b ≤ 106,,c ≤ 100。例如 a = 1,b = 6,c = 4时应该输出0.1667。
#include<stdio.h>
double roundNum(double, int); // 该函数用于实现四舍五入
#include<math.h>
int main(void)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c); double value = 1.0 * a / b;
double frac; printf("%d.", (int)value); // 这里必须强制类型转换
frac = value - (int)value; // 得到小数部分
frac = roundNum(frac, c); while(c--)
{
frac *= ;
printf("%d", (int)frac);
frac = frac - (int)frac;
} return ;
} double roundNum(double frac, int c)
{
int i;
double temp = 0.5; while(c--)
temp /= ; return temp+frac;
}
有趣的是前几天看《数据结构与算法:C语言描述》时遇到过极相似的问题,特别记录在了这里。
习题2-10 排列
用1,2,3,...,9组成3个三位数 abc,def 和 ghi,每个数字恰好使用一次,要求 abc :def:ghi = 1:2:3。输出所有的解。提示:不必太动脑筋。
#include<stdio.h>
int main(void)
{
int a, b, c, d, e, f, g, h, i;
for(a = ; a <= ; a++)
for(b = ; b <= ; b++)
if(a!=b)
for(c = ; c <= ; c++)
if(c!=a && c!=b)
for(d = ; d <= ; d++)
if(d!=a && d!=b && d!= c)
for(e = ; e <= ;e++)
if(e!=a && e!=b && e!=c && e!=d)
for(f = ; f <= ; f++)
if(f!=a && f!=b && f!=c && f!=d && f!=e)
for(g = ; g <= ; g++)
if(g!=a && g!=b && g!=c && g!=d && g!=e && g!=f)
for(h = ; h <= ; h++)
if(h!=a && h!=b && h!=c && h!=d && h!=e && h!=f && h!=g)
for(i = ; i <= ; i++)
if(i!=a && i!=b && i!=c && i!=d && i!=e && i!=f && i!=g && i!=h)
{
int n1 = a* + b* + c;
int n2 = d* + e* + f;
int n3 = g* + h* + i; if(n1*== n2 && n1*==n3)
printf("%d %d %d\n", n1, n2, n3);
}
return ;
} /*
数出结果:
192 384 576
219 438 657
273 546 819
327 654 981
*/
All Rights Reserved.
Author:海峰:)
Copyright © xp_jiang.
转载请标明出处:http://www.cnblogs.com/xpjiang/p/4156314.html
算法竞赛入门经典_第二章:循环结构程序设计_上机练习_MyAnswer的更多相关文章
- <算法竞赛入门经典> 第8章 贪心+递归+分治总结
虽然都是算法基础,不过做了之后还是感觉有长进的,前期基础不打好后面学得很艰难的,现在才慢慢明白这个道理. 闲话少说,上VOJ上的专题训练吧:http://acm.hust.edu.cn/vjudge/ ...
- [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- [刷题]算法竞赛入门经典 3-12/UVa11809
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...
- [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
- [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...
- 算法竞赛入门经典训练指南——UVA 11300 preading the Wealth
A Communist regime is trying to redistribute wealth in a village. They have have decided to sit ever ...
随机推荐
- fuser 命令的介绍
fuser 可以显示出当前哪个程序在使用磁盘上的某个文件.挂载点.甚至网络端口,并给出程序进程的详细信息. fuser显示使用指定文件或者文件系统的进程ID.默认情况下每个文件名后面跟一个字母表示访 ...
- 编码Q&A
Q:什么是编码? A:由于计算机中所有数据都是以二进制存在,那么为了存储数字,字母,各种符号和文字,计算机必须用一套映射系统来对应.比如我在某台计算机上规定,用00010001这个二进制数表示字母a, ...
- Linux下配置Lamp
linux下配置lamp步骤: 一.快速安装Apache+PHP5+MySql 先更新: # yum update 然后安装LAMP环境:(163的yum源上只有php5.1.6 mysql 5.0. ...
- thinkphp上传至服务器后模板无法解析原因
前几日做好的响应式静态页面上传至虚拟空间,打开网址地址出现: 模板不存在:./app/Home/View/Index/index.html 错误位置 FILE: /home/u333385714/pu ...
- js添加确认删除操作注意事项
function delsure(){ if(confirm('确认删除吗?')){ return true;//点击确定则返回这里的内容 }else{ return false; } } 在表单中添 ...
- Daily Scrum 10.31
今天是万圣节,也是编译课程设计第一次作业截至的日子,但由于大家对时间的合理安排,我们还是完成了一定的任务量. 下面是今天的Task统计: 不仅燃尽图和燃速图出不来,连那个所有迭代状态的图也出不来了.. ...
- MyISAM表加字段的特殊方法
最近一个统计系统的大表需要加字段,表的引擎是myisam,表大小在3亿,物理文件在106G.想想都蛋疼.那么这种情况下怎么把字段撸上去呢? 1. 首先想到了<高性能MySQL>提到的直接更 ...
- 二叉树-二叉查找树-AVL树-遍历
一.二叉树 定义:每个节点都不能有多于两个的儿子的树. 二叉树节点声明: struct treeNode { elementType element; treeNode * left; treeNod ...
- array_sum函数 number array_sum
数组的概念 数组就是一个用来存储一系列变量值的命名区域,每个数组元素有一个相关的索引,也成为关键字,它可以用来访问元素. PHP允许间隔性地使用数字或字符串作为数组的索引. 2.数字索引数组 2.1 ...
- json对象与json字符串对象格式
var cStr = "{\"c\":\"{\\\"b\\\":\\\"000\\\",\\\"b2\\\&q ...