读算法竞赛入门经典 记录的一些程序

    近期在看书,发现书中确实有很多有用的好东西,和对问题处理的巧妙方法。在下面将记录书中的几个程序:

number1:开灯问题(题目就不解释了,一直在开关问最后亮着的灯的编号)

  这个题是一个很好的模拟题:只要模拟这个过程就好了。

就我个人来说这个程序最好的地方就是使用了!这个运算符;

代码如下:

//开灯问题
int a[maxn];
int main(){
	int n,k,first=1;
	memset(a,0,sizeof(a));
	scanf("%d%d",&n,&k);
	for(int i=1;i<=k;i++){
		for(int j=1;j<=n;j++){
			if(j%i==0)a[j] = !a[j];
		}
	}
	for(int i=1;i<=n;i++){
		if(a[i]){
			if(first)first =0;
			else printf(" ");
			printf("%d",i);
		}
	}
	printf("\n");
	return 0;
} 

number2:蛇形添数这也是一个很好的模拟题,模拟添数的过程就好了;(在一个n*n的矩阵里填写1~n)

10 11 12 1
 9 16 13 2
 8 15 14 3
 7  6  5 4

代码如下:

//蛇形添数
int a[20][20];
int main(){
	int n,x,y,tot = 0;
	scanf("%d",&n);
	memset(a,0,sizeof(a));
	tot = a[x=0][y=n-1] = 1;
	while(tot < n*n){
		while(x+1=0&&!a[x][y-1]) a[x][--y] = ++tot;
		while(x-1>=0&&!a[x-1][y]) a[--x][y] = ++tot;
		while(y+1

number3:竖式问题(这是个使用字符串处理数字的好题)题目大意:找到所有形如abc*de(三位数*两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合求符合条件的个数和打印出竖式:模式如下:

输入2357 
<1>
..775
X..33
-----
.2325
2325.
-----
25575

代码如下:这里会是使用sprintf();功能是:输出到字符串,相当于给字符串赋值。

还有就是strchr();功能是在一个字符串里查找单个字符。

//竖式问题
int main(){
	int count = 0;
	char s[20],buf[99];
	scanf("%s",s);
	for(int abc = 111; abc<=999; abc++){
		for(int de = 11; de <= 99; de++){
			int x = abc*(de%10);
			int y = abc*(de/10);
			int z = abc*de;
			sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z);
			int ok = 1;
			for(int i=0;i\n",++count);
				printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n",abc,de,x,y,z);
			}
		}
		
	}
	printf("The number of solutions = %d\n",count);
	return 0;
} 

继续加油。                 

你可能感兴趣的:(巩固知识点)