算法竞赛_入门经典_刘汝佳__(2)

1,有几位数字

#include<stdio.h>

int main_2_1_digit(){
	int n;

	while(scanf("%d",&n)){
		int count = 0;
		if(n==0)
			count = 1;
		while(n){
			count++;
			n/=10;
		}

		printf("%d\n",count);
	}
	return 0;
}

2,三位数的三个数字

#include<stdio.h>

int main_2_2_daffodil(){

	int i,j,k;

	for(int n=100;n<=999;n++){
		i = n % 10;
		j = (n/10) % 10;
		k = (n/100) % 10;

		if( n == i*i*i + j*j*j + k*k*k){
			printf("%d\n",n);
		}
	}

	return 0;
}

3,韩信点兵

#include<stdio.h>

int main_2_3_hanxin(){

	int a,b,c;
	int i,sum;

	while(scanf("%d%d%d",&a,&b,&c)){
		sum = -1;
		for(i=10;i<=100;i++){
			if(i%3 == a && i%5 == b && i%7 == c){
				sum =i;
				break;
			}
		}

		if(sum == -1){
			printf("No answer\n");
		}else{
			printf("%d\n",sum);
		}
	}

	return 0;
}

4,打印倒三角

#include<stdio.h>

int main_2_4_triangle(){

	int n;
	int i,j;

	while(scanf("%d",&n)){

		for(i=n;i>0;i--){
			for(j=1;j < n;j++){
				if(j+i >= n+1){
					printf("#");
				}else{
					printf(" ");
				}
			}

			printf("#");

			for(j=n+1;j < 2*n;j++){
				if(j-i <= n-1){
					printf("#");
				}else{
					printf(" ");
				}
			}

			printf("\n");
		}

	}

	return 0;
}

5,输入n个数,比m小的

#include<stdio.h>

int main_2_5_stat(){
	int arr[1000];
	int n,m;
	int i;
	int count;

	while(scanf("%d",&n)){
		for(i=0;i<n;i++){
			scanf("%d",&arr[i]);
		}
		scanf("%d",&m);

		count=0;
		for(i=0;i<n;i++){
			if(m > arr[i]){
				count++;
			}
		}

		printf("%d\n",count);
	}

	return 0;
}

6,数aabb

#include<stdio.h>
#include<math.h>

int main_aabb_complete(){

	int a,b,n;
	double m;

	for(a=1;a<=9;a++){
		for(b=0;b<=9;b++){
			n=a*1100 + b*11;

			m=sqrt((double)n);

			//判断m是否为整数
			//进行浮点数比较的时候要考虑浮点误差
			if(floor(m+0.5) == m){
				printf("%d     %lf\n",n,m);
			}
		}
	}

	getchar();
	return 0;
}

7,浮点数陷阱

#include<stdio.h>

int main_float_trap(){

	double i;

	for(i=9;i!=10;i+=0.1){

		printf("%.1lf\n",i);

		if(i>10){
			break;
		}
	}

	return 0;
}

8,varble_no_init

#include<stdio.h>

int main_varble_no_init(){

	int a,b,c;

	printf("%d %d %d",a,b,c);

	scanf("%d",&a);

	return 0;

}

9,全排列

#include<stdio.h>

int n = 0;
void swap(int *a,int *b){
	int m = *a;
	*a = *b;
	*b = m;
}

void perm(int list[],int k,int m){
	int i;

	if(k > m){
		for(i=0;i<=m;i++){
			printf("%d ",list[i]);
		}
		printf("\n");
		n++;
	}else{
		for(i=k;i<=m;i++){
			swap(&list[k],&list[i]);
			perm(list,k+1,m);
			swap(&list[k],&list[i]);
		}
	}
}

int main_quan_pai_lie_version_1(){
	int list[] = {1,2,3,4,5};

	perm(list,0,4);

	printf("total: %d\n",n);

	return 0;
}

算法竞赛_入门经典_刘汝佳__(2),布布扣,bubuko.com

时间: 2024-12-10 23:45:11

算法竞赛_入门经典_刘汝佳__(2)的相关文章

算法竞赛入门经典(刘汝佳)课后习题前三章答案

本文转载: 第一章习题1-1#include <stdio.h>int main(){int a,b,c;double d;scanf("%d%d%d",&a,&b,&c);d=(double)(a+b+c);printf("%.3lf\n",d/3.0);return 0;} 习题1-2#include <stdio.h>int main(){int f;double c;scanf("%d",&

拓扑排序((算法竞赛入门经典)刘汝佳)

转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents [分析](小白) 把每一个变量看成一个点,"小于"关系看成有向边,则我们得到了一个有向图.这样,我们的任务实际上是把一个图的全部结点排序,使得每一条有向边(u,v)相应的u都排在v的前面.在图论中,这个问题称为拓扑排序. 不难发现:假设图中存在有向环,则不存在拓扑排序,反之则存在.我们把不包括有向环的有向图称为有向无环图.能够借助dfs函数完毕拓扑排序:在訪问完一个结点

算法竞赛与入门经典---P66 [UVA 10635] Prince and Princess

Prince and PrincessInput: Standard Input Output: Standard Output Time Limit: 3 Seconds In an n x n chessboard, Prince and Princess plays a game. The squares in the chessboard are numbered 1, 2, 3 ... n*n, as shown below: Prince stands in square 1, ma

机器学习_深度学习_入门经典(永久免费报名学习)

机器学习_深度学习_入门经典(博主永久免费教学视频系列) https://study.163.com/course/courseMain.htm?courseId=1006390023&share=2&shareId=400000000398149 作者座右铭---- 与其被人工智能代替,不如主动设计机器为我们服务. 长期以来机器学习很多教材描述晦涩难懂,大量专业术语和数学公式让学生望而止步.生活中机器学习就在我们身边,谷歌,百度,Facebook,今日头条都运用大量机器学习算法,实现智能

UVA1625 Color Length(附 刘汝佳代码)

这是刘汝佳<算法竞赛入门经典第二版>的一道例题,只看书上的解释并没有理解,随后结合着代码才理解了. 解题思路:用d[i][j]表示序列1移走i个元素和序列2移走j个元素的最小"代价", 这个代价指的是由那些已经移出的字母合并而来的序列中已经出现但尚未结束的字母对总距离和的贡献.比如说一个合并而来的序列中有两个那样的字母,第一个在这个序列中后面有3个字母,另一个字母后面有2个字母,那么此时的代价就是2+3,表示这两个字母在这种合并情况下至少能为总距离和贡献5,因为随着向该序列

计算几何模板(刘汝佳本)(转载)

转载自: 计算几何模板(仿照刘汝佳大白书风格) 想想自己一个学期连紫皮都没看完就想自杀 // Geometry.cpp #include <bits/stdc++.h> #define LL long long #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 #define PI 3.1415926535897932384626 #define EXIT exit(0); #define DEBUG puts(

c++20701除法(刘汝佳1、2册第七章,暴搜解决)

20701除法 难度级别: B: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述     输入正整数n,按从小到大的顺序输出所有满足表达式abcde/fghij=n的abcde和fghij,其中a~j恰好为数字0~9的一个排列. 如果没有符合题意的数,输出0.本题所说的五位数可以包括前导0的,如01234在这里也称为五位数. 输入 一个正整数n  输出 若干行,每行包括两个符合要求的五位正整数(每行的两个数先大后小),两数之

(凸包模板)(刘汝佳)

struct point{ int x,y;} p[N],stack[N]; bool cmp(point A,point B){ if(A.y==B.y)return A.x<B.x; return A.y<B.y;}int cross(point A,point B,point C){ return (B.x-A.x)*(C.y-A.y)-(C.x-A.x)*(B.y-A.y);}void graham(){ sort(p,p+n,cmp); int i; top=0; for(i=0;

bzoj 2732 [HNOI2012]射箭 半平面交(刘汝佳版不超时) + 整型二分处理

题目来源: http://61.187.179.132/JudgeOnline/problem.php?id=2732 题意:   对于一个靶子, 得到两个不等式. 裸地半平面交 . 分析: 用的 一般的 模板,总是TLE . 改成了 刘汝佳 版本 ,依然超时, 所谓的常数太大???? 后来注意到 : 当    判断两个向量平行且 同向 ,取左边的一个,不要用 叉积,用极角判断, 可行. 精度 开 1e -16 , 卡精度严重. 注意:这里 也不需要用 friend 写, 也可以ac. 整型二分