20分————最后的战役————要得要得!
苦练NOIP,虽然觉得自己水平差极!
今得一题,如下:
NOIP2005普及组第一题源代码:陶陶摘苹果
Www.Class73.Cn 2006-8-7 Class73
若需要PASCAL解法请打开NOIP栏目下的PASCAL,在里面寻找相关文件
陶陶摘苹果(apple.pas/c/cpp)
【问题描述】
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
【输入文件】
输入文件apple.in包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
【输出文件】
输出文件apple.out包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
【样例输入】
100 200 150 140 129 134 167 198 200 111110
【样例输出】
5
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
曾经求教过
得如下代码:(不必看)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int get_data(char* filename,int data[12])//fromfile
{
FILE* fp;
char line[100];
char* s=line;
int i,pos=0;
if((fp=fopen(filename,"r"))==0)
return 0;
fgets(line,100,fp);
for(i=0;i<10;++i)
{
pos=0;
sscanf(s,"%d ",&data[i]);
while(isdigit(s[pos]))
pos++;
while(isspace(s[pos]))
pos++;
s+=pos;
}
fgets(line,100,fp);
sscanf(line,"%d",&data[10]);
return 1;
}
void print_data(int data[12])
{
int i;
for(i=0;i<11;++i)
printf("%d ",data[i]);
printf("\n");
}
void write_count(char* filename,int count)
{
FILE* fp;
char line[100];
sprintf(line,"%d\n",count);
if((fp=fopen(filename,"w"))==0)
return ;
fwrite(line,1,strlen(line),fp);
}
int apple(int data[12])
{
int i,count=0;
for(i=0;i<10;++i)
{
if(data[i]<=30+data[10])
++count;
}
return count;
}
int main()
{
char *filein="apple.in",*fileout="apple.out";
int high[12];
get_data(filein,high);
//print_data(high);
write_count(fileout,apple(high));
return 0;
}
÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷
难极!!!!!!!!!!!!!!!!!!!!!
从一网站搜的:
#include<stdio.h>
int main()
{
int chair=30,high,sum=0,i,apples[10],*p=apples;
FILE *in,*out;
p=apples;
in=fopen("apple.in","r");
out=fopen("apple.out","w");
for(i=0;i<=9;i++)
fscanf(in,"%d",p++);
fscanf(in,"%d",&high);
fclose(in);
p=apples;
for(i=0;i<=9;i++)
if(high+chair>=*p++) sum++;
fprintf(out,"%d",sum);
fclose(out);
}
÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷
太难懂(我不想看指针那一节)!!!!!!!!1
自己写的:
#include "stdio.h"
main()
{
int ah[10],ph,num,a;
FILE *open,*close;
open=fopen("apple.in","r");
close=fopen("apple.out","w");
for(a=0;a<=9;a++)
fscanf(open,"%d",ah[a]);
fscanf(open,"\n%d",ph);
ph+=30;
for(a=0;a<=9;a++)
{
if(ah[a]<=ph)
num+=1;
}
fprintf(close,"%d",num);
fclose(open);
fclose(close);
}
编译通过,但不成功!!
望君指出!!!!!
BTW:
1。C语言读文件时想换行读数据怎么换行?那写文件时呢?
2。如果有如下代码scanf("%d %d\n%d",&a,&b,&c);该怎么输入呀!??