行首行尾的处理

       题目一般要求输出数据时行首行尾均无空格,而相邻数据间用单个空格隔开,此时我们分两条语句输出。

        下面这个程序适用于处理,知道数组的具体长度的题目。

#include
#define maxn 105
int a[maxn];
int main(){
	int x,n=0;
	while(scanf("%d",&x)==1){
		a[n++]=x;
	}
	int i;
	for(i=n-1;i>0;i--){
		printf("%d ",a[i]);
	}
	printf("%d\n",a[0]);
	return 0;
}

       上面这个程序里面还有一个注意的点,数组a的声明在main函数的外面。和放在里面的区别是,只有放在外面时,数组a才可以开得很大;放在main函数里面数组稍大就会异常退出。

       当不知道数组的具体长度时采用下面的程序处理

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

       同样的一般有很多行输出时,行与行之间换行,但是最后一行输出后,不再换行,也是分开操作,单独对最后一行进行处理。

 不做处理:

#include
#define maxn 100
int main(){
	int a,i,b,c,kase=0;
	int m[maxn];
	for(i=100;i<=999;i++){
		a=i%10;
		b=i/10%10;
		c=i/100;
		if(a*a*a+b*b*b+c*c*c==i){
			m[kase++]=i;
		}	
	}
	for(i=0;i<=kase-1;i++){
			printf("%d\n",m[i]);
	}
	//printf("%d",m[kase-1]);
	return 0;
}

  输出结果 :

153
370
371
407

  处理后:

#include
#define maxn 100 
int main(){
	int a,i,b,c,kase=0;
	int m[maxn];
	for(i=100;i<=999;i++){
		a=i%10;
		b=i/10%10;
		c=i/100;
		if(a*a*a+b*b*b+c*c*c==i){
			m[kase++]=i;
		}	
	}
	for(i=0;i<=kase-2;i++){
			printf("%d\n",m[i]);
	}
	printf("%d",m[kase-1]);
	return 0;
}

 输出结果:

153
370
371
407

    将题目要求读明白,尤其是输出的格式。

你可能感兴趣的:(算法竞赛学习,算法,c语言,c++)