洛谷题目按难度点评---入门难度
1.p1421 小玉买文具
难度:入门难度
考点:输入,输出,整数的四则运算
适用:小学生
#include
int main(){
int a,b,c;
scanf("%d%d",&a,&b);
c=(a*10+b)/19;
printf("%d\n",c);
return 0;
}
2.p1888 三角函数
难度:入门难度
考点:三角函数,三角形角边简单特征,输入,输出 ,欧几里德算法(辗转相除法),若不使用,容易超时,排序
陷阱:超时,求最大公约数时,不使用欧几里德算法,容易超时。
适用:初中生,若是小学生,要提前学些三角函数及三角形简单特性,欧几里德算法
#include
int k=1;
void gcd(int a,int b){
if(b==0){
k=a;
return;
}
gcd(b,a%b);
}
int main(){
int c[3];
int i,j,t;
int a,b;
for(i=0;i<=2;i++)
scanf("%d",&c[i]);
for(i=0;i<=2;i++)//由大到小排序
for(j=i+1;j<=2;j++)
if(c[i]0];//斜边
b=c[2];//最小直角边
gcd(a,b);
printf("%d/%d\n",b/k,a/k);
return 0;
}
方法二:2017-10-16 18:44
#include
//TLE 10^9 10^6
//朴素算法
//gcd 欧几里德算法
int main(){
int a,min=1999999999,max=-1,i,k;
for(i=0;i<3;i++){
scanf("%d",&a);
if(aif(a>max)max=a;
}
for(i=1;i<=min;i++)
if(min%i==0&&max%i==0)k=i;
printf("%d/%d\n",min/k,max/k);
return 0;
}
方法三:2017-10-16 18:46
#include
//TLE 10^9 10^6
//朴素算法
//gcd 欧几里德算法
int gcd(int a,int b){
if(b==0)return a;
return gcd(b,a%b);
}
int main(){
int a,min=1999999999,max=-1,i,k;
for(i=0;i<3;i++){
scanf("%d",&a);
if(aif(a>max)max=a;
}
k=gcd(max,min);
printf("%d/%d\n",min/k,max/k);
return 0;
}
本人偏好方法三。
#include
int a[10000000+10];
int d[10000000+10];
int main(){
int n,i,j;
int max;
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
d[0]=1;
for(i=1;i1;
if(a[i-1]-1];
}
max=0;
for(i=0;iif(d[i]>max)
max=d[i];
printf("%d\n",max);
return 0;
}
#include
int a[10000+10];
int d[10000+10];
int main(){
int n,i;
int max;
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
d[0]=1;
for(i=1;i1;
if(a[i]==a[i-1]+1)
d[i]+=d[i-1];
}
max=0;
for(i=0;iif(maxprintf("%d\n",max);
}
5.p2006 赵神牛的游戏
难度:入门难度
考点:输入,输出 ,数组,整数四则运算
适用:小学生
注意:过大的数组要开到main函数的外面。
小技巧:要设置一个计数变量
陷阱:没注意到陷阱,该题得分为70,陷阱是a[i],b[i]均可能是0,即除数有可能是0
#include
int a[30000+10],b[30000+10],c[30000+10];
int main(){
int k,m,n;
int i,j;
int count=0;
scanf("%d%d%d",&k,&m,&n);
for(i=1;i<=m;i++){
scanf("%d%d",&a[i],&b[i]);
if(a[i]==0&&b[i]==0)
c[i]=0;
else if(a[i]==0&&b[i]!=0)
c[i]=n;
else
c[i]=k/a[i]*b[i];
}
for(i=1;i<=m;i++)
if(c[i]>=n){
count++;
if(count==1)
printf("%d",i);
else
printf(" %d",i);
}
if(count==0)
printf("-1\n");
else
printf("\n");
return 0;
}
6.p1425 小鱼的游泳时间 类似 P1421 小玉买文具
难度:入门难度
考点:输入,输出 ,整数四则运算,取整,取模
适用:小学生
#include
int main(){
int a,b,c,d;
int e,f,g,h,i;
scanf("%d%d%d%d",&a,&b,&c,&d);
e=a*60+b;
f=c*60+d;
g=f-e;
h=g/60;
i=g%60;
printf("%d %d\n",h,i);
return 0;
}
7.p1876 开灯
难度:入门难度
考点:输入,输出 ,整数四则运算
适用:小学生
技巧:按照题意,按部就班,肯定超时。故采用枚举n=1......10查找亮灯规律,发现亮的灯满足1^2,2^2,3^2,k^2<=n
n=1 1
n=2 1
n=3 1
n=4 1 4
n=5 1 4
n=6 1 4
n=7 1 4
n=8 1 4
n=9 1 4 9
n=10 1 4 9
感悟:枚举,找规律,纸笔省不了了。该题难在思考上。
#include
int main(){
long long n;
long long i;
scanf("%lld",&n);
for(i=1;i*i<=n;i++)
if(i==1)
printf("%d",i*i);
else
printf(" %d",i*i);
printf("\n");
return 0;
}
8.p1634 禽兽的传染病
难度:入门难度
考点:输入,输出 ,整数四则运算,long long
适用:小学生
感悟:动笔找规律是必要的,该题的推导容易上当,一种错误如下:
n=1 1+x
n=2 (1+x)^2
n=3 (1+x)^2*(1+x)^2
正确如下:
n=1 1+x
n=2 1+x+(1+x)*x
n=3 1+x+(1+x)*x+(1+x+(1+x)*x)*x
#include
int main(){
long long x,n;
long long i;
long long ans;
scanf("%lld%lld",&x,&n);
ans=1+x;
for(i=2;i<=n;i++)
ans=ans+ans*x;
printf("%lld\n",ans);
return 0;
}
9.p2192 HXY玩卡片
题目有问题:样例1改成-1,题目没有问题,样例1输出确实是0
难度:入门难度
考点:输入,输出 ,取整
适用:小学生
感悟:因n<=1000,故正常的将输出的数用一个整数来表示,不现实。
该题演变为5的个数必须是9的整数倍,多出的尾巴位置可用0填充。
小技巧:统计5与0的个数
陷阱:输出结果可以是0,此处容易忽略。
#include
int main(){
int n;
int count5=0,count0=0;
int i,v;
int num;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&v);
if(v==5)
count5++;
else
count0++;
}
if(count5/9<1){
if(count0==0)
printf("-1\n");
else//输出结果可以是0,此处容易漏
printf("0\n");
}
else if(count0==0)
printf("-1\n");
else{
num=count5/9*9;
for(i=1;i<=num;i++)
printf("5");
for(i=1;i<=count0;i++)
printf("0");
printf("\n");
}
return 0;
}
10.p1150 Peter的烟
难度:入门难度
考点:输入,输出 ,整数四则运算,取整,取模
适用:小学生
小技巧:烟蒂数目是整个代码的核心。
#include
int main(){
int n,k;
int sum=0;//香烟
int d;//烟蒂
scanf("%d%d",&n,&k);
d=n;
sum+=n;
while(d/k){
sum+=d/k;
d=d/k+d%k;
}
printf("%d\n",sum);
return 0;
}
11.p1590 失踪的7
难度:入门难度
考点:输入,输出 ,整数四则运算,取整,取模 ,long long,栈
适用:小学生
注意:过大的数组要开到main函数的外面。
小技巧:枚举,找规律,采用9进制8-7,9-8,分离出个十百千等位进行计算
陷阱:注意,不仅仅个位上有7,十位上也可以有7,百位上也可以有7,这是容易遗漏的地方
感悟:改代码,牵一发而动全身,一处改了,其它地方也得查。
#include
long long a[1000000];
long long b[1000000];//栈
long long mul(long long t){//次方函数9^t
long long i;
long long ans=1;
for(i=1;i<=t;i++)
ans*=9;
return ans;
}
int main(){
long long t;
long long i,j;
long long ans;
long long top;
scanf("%lld",&t);
for(i=1;i<=t;i++)
scanf("%lld",&a[i]);
for(i=1;i<=t;i++){
top=-1;
while(a[i]){//分离出个十百千位等
top++;
if(a[i]%10>7)
b[top]=(a[i]%10-1);
else
b[top]=a[i]%10;
a[i]/=10;
}
ans=0;
for(j=top;j>=0;j--)
ans+=b[j]*mul(j);
printf("%lld\n",ans);
}
return 0;
}
12.p2689 东南西北
题目的问题:题目描述求最少时间,输出格式 最少多少步,最终确认求步数
样例1解释,应为 向东走一步,向北走一步。
难度:入门难度
考点:输入,输出 ,数组,C(字符串操作),C++(字符读取)
适用:初中生,若是小学生,需介绍坐标,负数
感悟:纸笔画图模拟。涉及字符的读取,C++要比C方便多了
#include
#include
int main(){
int x1,y1,x2,y2;
int t;
int i,k;
char st[3];
char s[100];
int dir[4];//四个方向dir[0]北,dir[1]南,dir[2]西,dir[3]东
int len;
int need[4];//需要的四个方向need[0]北,need[1]南,need[2]西,need[3]东
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
scanf("%d",&t);
k=0;
for(i=1;i<=t;i++){
scanf("%s",st);
s[k++]=st[0];
}
s[k]='\0';//字符串结束标志
len=strlen(s);
memset(dir,0,sizeof(dir));
for(i=0;i//读取输入的风向
if(s[i]=='N')//北
dir[0]++;
else if(s[i]=='S')//南
dir[1]++;
else if(s[i]=='W')//西,此处写成'E',查了好一会
dir[2]++;
else//东
dir[3]++;
memset(need,0,sizeof(need));
if(x2-x1>=0)//东
need[3]=x2-x1;
else//西
need[2]=x1-x2;
if(y2-y1>=0)//北
need[0]=y2-y1;
else//南
need[1]=y1-y2;
if(dir[0]>=need[0]&&dir[1]>=need[1]&&dir[2]>=need[2]&&dir[3]>=need[3])
printf("%d\n",need[0]+need[1]+need[2]+need[3]);
else
printf("-1\n");
return 0;
}
13.p1046 陶陶摘苹果
难度:入门难度
考点:输入,输出 ,整数四则运算,数组
适用:小学生
感悟:菜题
#include
int main(){
int h[10+10];
int i;
int t;
int count=0;
for(i=0;i<10;i++)
scanf("%d",&h[i]);
scanf("%d",&t);
for(i=0;i<10;i++)
if(t+30>=h[i])
count++;
printf("%d\n",count);
return 0;
}
14. p1179 数字统计
难度:入门难度
考点:输入,输出 ,整数四则运算,取整,取模,函数编写,栈,算法时间复杂度
适用:小学生
感悟:原本以为该题需要用什么技巧。一看<=100000,立马想到枚举,采用分离个十百千万的做法,数出2的个数。
#include
int count2(int a){
int top=-1;
int b[10];
int i;
int count=0;
while(a){
top++;
b[top]=a%10;
a/=10;
}
for(i=0;i<=top;i++)
if(b[i]==2)
count++;
return count;
}
int main(){
int L,R;
int ans=0;
int i;
scanf("%d%d",&L,&R);
for(i=L;i<=R;i++)
ans+=count2(i);
printf("%d\n",ans);
return 0;
}
15.p1909 买铅笔
难度:入门难度
考点:输入,输出 ,取整,取余(取模),结构体
适用:小学生
#include
struct node{
int num;
int cost;
}p[3];
int main(){
int n;
int i;
int ans[3];
int min;
scanf("%d",&n);
for(i=0;i<3;i++)
scanf("%d%d",&p[i].num,&p[i].cost);
for(i=0;i<3;i++){
if(n%p[i].num==0){//整除
ans[i]=n/p[i].num*p[i].cost;
}else{//不能整除
ans[i]=(n/p[i].num+1)*p[i].cost;
}
}
min=999999999;
for(i=0;i<3;i++)
if(min>ans[i])
min=ans[i];
printf("%d\n",min);
return 0;
}
16.p1035 级数求和
难度:入门难度
考点:输入,输出 ,整数、浮点数运算,
适用:小学生
陷阱:此题写得不好,容易超时
感悟:测试 12时,已经反应很慢了,比较忐忑. 提交果然超时。本题的特点是容易测试,发现问题,就需要找出超时的问题,进行改进。
#include
int main(){
int k;
int i;
double ans;
scanf("%d",&k);
ans=1;
i=1;
while(1){
if(ans>k)
break;
i++;
ans+=1.0/i;
}
printf("%d\n",i);
return 0;
}
17.p1085 不高兴的津津
难度:入门难度
考点:输入,输出 ,整数四则运算,数组,找最大值
适用:小学生
技巧:大于等于8,痛苦指数为a+b,否者为0
#include
int main(){
int a,b,c[8],i,max,k;
for(i=1;i<=7;i++){
scanf("%d%d",&a,&b);
if(a+b>=8)
c[i]=a+b;
else
c[i]=0;
}
max=0;
k=0;
for(i=1;i<=7;i++)
if(maxprintf("%d\n",k);
return 0;
}
18. p1075 质因数分解
难度:入门难度
考点:输入,输出 ,取模
适用:小学生
陷阱:题目读起来很吓人,但仔细研读,发现很多条件是限定的。题目比想象中的简单许多了,该数一定是两个质数相乘
#include
int main(){
int a,b,c;
int i;
scanf("%d",&c);
for(i=2;i*i<=c;i++)
if(c%i==0)
break;
printf("%d\n",c/i);
return 0;
}
19.p1914 小书童---密码
难度:入门难度
考点:输入,输出 ,字符串,字符处理,取模
适用:小学生
#include
#include
char s[1024];
int main(){
int n;
int i;
int len;
scanf("%d%s",&n,s);
len=strlen(s);
for(i=0;i'a'+n)%26+'a';
printf("%s\n",s);
return 0;
}
20.p1423 小玉在游泳
难度:入门难度
考点:输入,输出 ,浮点数计算
适用:小学生
#include
int main(){
float x;
int i;
float step;
float ans;
scanf("%f",&x);
i=1;
step=2;
ans=step;
while(ans0.98;
ans+=step;
}
printf("%d\n",i);
return 0;
}
21.p1957 口算练习题
难度:入门难度
考点:输入,输出 ,整数四则运算,字符串操作,字符转数字,数字转字符
适用:小学生
难点:数据格式不统一,造成读写困难
#include
#include
int main(){
int n;
int i,j;
char cmd[50+10][10];
char last[10];
char output[100];
int a[50+10],b[50+10],c[50+10];
int len;
scanf("%d",&n);
scanf("%s%d%d",cmd[1],&a[1],&b[1]);
strcpy(last,cmd[1]);
for(i=2;i<=n;i++){//读取
scanf("%s",cmd[i]);
if(cmd[i][0]>='a'&&cmd[i][0]<='z'){
scanf("%d%d",&a[i],&b[i]);
strcpy(last,cmd[i]);
}else{//读取的是数字,将字符串转成数字
len=strlen(cmd[i]);
a[i]=0;
a[i]+=cmd[i][0]-'0';//此处0写成j又是查了半天,低级错误
for(j=1;j10;
a[i]+=cmd[i][j]-'0';
}
strcpy(cmd[i],last);
scanf("%d",&b[i]);
}
}
for(i=1;i<=n;i++){
switch(cmd[i][0]){
case 'a':
c[i]=a[i]+b[i];
sprintf(output,"%d+%d=%d",a[i],b[i],c[i]);
printf("%s\n",output);
printf("%d\n",strlen(output));
break;
case 'b':
c[i]=a[i]-b[i];
sprintf(output,"%d-%d=%d",a[i],b[i],c[i]);
printf("%s\n",output);
printf("%d\n",strlen(output));
break;
case 'c':
c[i]=a[i]*b[i];
sprintf(output,"%d*%d=%d",a[i],b[i],c[i]);
printf("%s\n",output);
printf("%d\n",strlen(output));
break;
}
}
return 0;
}
22.P1190 接水问题
难度:入门难度
考点:输入,输出 ,找最大值,找最小值,函数的写法
适用:小学生
#include
int a[100+10];//水龙头数
int b[10000+10];//人数
int findmax(int *a,int b,int e){
int i;
int max=0;
int k;
for(i=b;i<=e;i++)
if(maxreturn k;
}
int findmin(int *a,int b,int e){
int i;
int min=999999;
int k;
for(i=b;i<=e;i++)
if(min>a[i]){
min=a[i];
k=i;
}
return k;
}
int main(){
int i,j;
int n,m;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&b[i]);
if(n<=m){//水龙头数多
j=findmax(b,1,n);
printf("%d\n",b[j]);
}else{//人数多
for(i=1;i<=m;i++)
a[i]=b[i];
for(i=m+1;i<=n;i++){//加入后续打水学生
j=findmin(a,1,m);
a[j]+=b[i];
}
j=findmax(a,1,m);
printf("%d\n",a[j]);
}
return 0;
}
23.p2669 金币
难度:入门难度
考点:输入,输出 ,整数平方运算,边界处理
适用:小学生
难点:边界处理,数据一不小心容易出错,测试,跟踪必不可少。
提醒:在提交前,别忘了删除跟踪代码,可以进行输入输出测试,找出跟踪代码进行删除。
#include
int main(){
int k;
int ans;
int i;
scanf("%d",&k);
//初始化
i=1;
ans=0;
while(k>0){
k=k-i;
ans+=i*i;
i++;
}
if(k==0)
printf("%d\n",ans);
else{//边界处理
i--;//回退数据
ans-=i*i;//回退数据
k+=i;
ans+=i*k;
printf("%d\n",ans);
}
return 0;
}
24.p1980 计数问题
难度:入门难度
考点:输入,输出 ,取整,取模,分离出整数的个十百千万
适用:小学生
#include
int cal(int a,int x){
int ans;
ans=0;
while(a){
if(a%10==x)
ans++;
a/=10;
}
return ans;
}
int main(){
int n,x;
int i;
int ans;
scanf("%d%d",&n,&x);
ans=0;
for(i=1;i<=n;i++)
ans+=cal(i,x);
printf("%d\n",ans);
return 0;
}
25.p1059 明明的随机数
难度:入门难度
考点:输入,输出 ,数组,排序
适用:小学生
#include
int main(){
int n;
int i,j,t;
int a[100+10];
int b[100+10];
int count;
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
for(i=0;i//冒泡排序,自小到大
for(j=i+1;jif(a[i]>a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
count=1;
b[0]=a[0];
for(i=1;iif(b[count-1]!=a[i])
b[count++]=a[i];
printf("%d\n",count);
printf("%d",b[0]);
for(i=1;iprintf(" %d",b[i]);
printf("\n");
return 0;
}
26.p1307 数字反转
难度:入门难度
考点:输入,输出 ,取整,取模,分离出个十百千万位数,数组
适用:小学生
陷阱:如9000,反转后是9,不容易想到。
#include
int main(){
int n;
int a[20];
int top;
int flag;
int i,j;
scanf("%d",&n);
if(n==0){//n=0处理
printf("0\n");
return 0;
}
if(n>0)//大于0
flag=1;
else{//小于0
flag=-1;
n*=-1;
}
top=-1;
while(n){
top++;
a[top]=n%10;
n/=10;
}
if(flag==-1)
printf("-");
j=0;
while(a[j]==0&&j<=top)
j++;
for(i=j;i<=top;i++)
printf("%d",a[i]);
return 0;
}
27.p2670 扫雷游戏 #include
char s[100+5][100+5];
int b[100+5][100+5];
int step[8][2]={{0,-1},{0,1},{-1,0},{1,0},{-1,-1},{1,-1},{-1,1},{1,1}};
int n,m;
int fun(int r,int c){
int count=0;
int i,j;
int newr,newc;
for(i=0;i<8;i++){
newr=r+step[i][0];
newc=c+step[i][1];
if(newr>=0&&newr=0&&newc//此处容易写错 newx>=0&&newx=0&&newy
if(s[newr][newc]=='*')
count++;
}
return count;
}
int main(){
int i,j;
scanf("%d%d",&n,&m);
for(i=0;iscanf("%s",s[i]);
for(i=0;ifor(j=0;jif(s[i][j]=='*')
b[i][j]=-1;//地雷位置设为-1
else
b[i][j]=fun(i,j);
}
for(i=0;ifor(j=0;jif(b[i][j]==-1)
printf("*");
else
printf("%d",b[i][j]);
printf("\n");
}
return 0;
}
28.p1055 ISBN号码 #include
int main(){
char s[20];
int ans;
scanf("%s",s);
ans=(s[0]-'0')*1+(s[2]-'0')*2+(s[3]-'0')*3+(s[4]-'0')*4;
ans+=(s[6]-'0')*5+(s[7]-'0')*6+(s[8]-'0')*7+(s[9]-'0')*8+(s[10]-'0')*9;
ans%=11;
if(ans==10)
if(s[12]=='X')
printf("Right\n");
else{
s[12]='X';
printf("%s\n",s);
}
else if(ans==s[12]-'0')
printf("Right\n");
else{
s[12]=ans+'0';
printf("%s\n",s);
}
return 0;
}
29.p1047 校门外的树
注意:过大的数组要开到main函数的外面
int a[10000+10];
#include
int main(){
int L,m;
int i,j,start,end;
int remain;
scanf("%d%d",&L,&m);
for(i=0;i<=L;i++)
a[i]=1;
for(i=0;iscanf("%d%d",&start,&end);
for(j=start;j<=end;j++)
a[j]=0;
}
remain=0;
for(i=0;i<=L;i++)
if(a[i]==1)
remain++;
printf("%d\n",remain);
return 0;
}
30.p1422 小玉家的电费
适用:小学生
#include
int main(){
int a;
float b;
scanf("%d",&a);
if(a<=150)
b=a*0.4463;
else if(a>=151&&a<=400)
b=150*0.4463+(a-150)*0.4663;
else if(a>400)
b=150*0.4463+(400-150)*0.4663+(a-400)*0.5663;
printf("%.1f\n",b);
return 0;
}
31.p1001 A+B Problem
适用:小学生
#include
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
return 0;
}
32.p1008 三连击
#include
#include
int a[10];
int visited[10];
int n=9;
void dfs(int step){
int b,c,d;
int i;
b=a[1]*100+a[2]*10+a[3];
c=a[4]*100+a[5]*10+a[6];
d=a[7]*100+a[8]*10+a[9];
if(step==n+1){
if(c==2*b&&d==3*b)
printf("%d %d %d\n",b,c,d);
return;
}
for(i=1;i<=9;i++)
if(visited[i]==0){
a[step]=i;
visited[i]=1;
dfs(step+1);
visited[i]=0;
}
}
int main(){
memset(visited,0,sizeof(visited));
dfs(1);
return 0;
}
33.p1548 棋盘问题
#include
int main(){
int n,m;
int r1,c1,r2,c2,e1,e2;
int square=0,rect=0;
scanf("%d%d",&n,&m);
for(r1=0;r1<=n;r1++)
for(c1=0;c1<=m;c1++)
for(r2=r1+1;r2<=n;r2++)
for(c2=c1+1;c2<=m;c2++){
e1=r2-r1;
e2=c2-c1;
if(e1>0&&e2>0)
if(e1==e2)
square++;
else
rect++;
}
printf("%d %d\n",square,rect);
}
34.p1424 小鱼的航程(改进版)
#include
int main(){
int x,n;
int i;
int ans;
int end;
scanf("%d%d",&x,&n);
ans=0;
end=n+x;
for(i=x;iif(i%7!=0&&i%7!=6)//非双休日
ans+=250;
printf("%d\n",ans);
return 0;
}
35.p1427 小鱼的数字游戏
#include
int a[100+10];
int main(){
int v;
int count=0;
int i;
scanf("%d",&v);
while(v){
a[count]=v;
count++;
scanf("%d",&v);
}
printf("%d",a[count-1]);
for(i=count-2;i>=0;i--)
printf(" %d",a[i]);
printf("\n");
return 0;
}
36.p1428 小鱼比可爱
37.p1200 你的飞碟在这儿
难度:入门难度
考点:输入,输出 ,字符串操作,字符转数字,取模
适用:小学生
#include
#include
int main(){
char hui[10],dui[10];
int h,d;
int hlen,dlen;
int i;
scanf("%s%s",hui,dui);
hlen=strlen(hui);
dlen=strlen(dui);
h=1;
d=1;
for(i=0;i'A'+1;
for(i=0;i'A'+1;
if(h%47==d%47)
printf("GO\n");
else
printf("STAY\n");
return 0;
}
38.p1308 统计单词数
#include
#include
#include
char s1[20];
char s2[1000000+10];
int main(){
int count=0;
char c;
int i,j;
int s1len,s2len;
int flag;
int num,k;
scanf("%s",s1);
//字符串s2读取,比较费力
while((c=getchar())!=EOF)
if(c!='\r'&&c!='\n')
s2[count++]=c;
while(!isalpha(s2[count-1]))
count--;
s2[count]='\0';
s1len=strlen(s1);
s2len=strlen(s2);
//s1,s2字符串,转化成小写
for(i=0;iif(isalpha(s1[i])&&s1[i]>='A'&&s1[i]<='Z')
s1[i]='a'+s1[i]-'A';
for(i=0;iif(isalpha(s2[i])&&s2[i]>='A'&&s2[i]<='Z')
s2[i]='a'+s2[i]-'A';
num=0;
for(i=0;i0;
for(j=0;jif(s2[i+j]==s1[j])
flag=1;
else{
flag=0;
break;
}
}
if(flag==1){
if(s2[i+s1len]==' '||i+s1len==count){//i+s1len==count表示结尾
if(i==0||s2[i-1]==' '){//开头
num++;
if(num==1)
k=i;
}
}
}
}
if(num>0)
printf("%d %d\n",num,k);
else
printf("-1\n");
return 0;
}
39.//P1664 每日打卡心情好