行首行尾的处理
题目一般要求输出数据时行首行尾均无空格,而相邻数据间用单个空格隔开,此时我们分两条语句输出。
下面这个程序适用于处理,知道数组的具体长度的题目。
#include<stdio.h>
#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<stdio.h>
#include<string.h>
#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<stdio.h>
#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<stdio.h>
#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
将题目要求读明白,尤其是输出的格式。