NOIP 提高组 初赛 四、阅读程序写结果 习题集(九)NOIP2014-NOIP2015
1.第二十届(NOIP2014)
问题:
1.
//2014.4.1
#include <stdio.h>
int main(){
int a,b,i,tot,c1,c2;
scanf("%d%d",&a,&b);
tot=0;
for(i=a;i<=b;i++){
c1=i/10;
c2=i%10;
if((c1+c2)%3==0)
tot++;
}
printf("%d\n",tot);
return 0;
}
//输入:7 31
2.
//2014.4.2
#include <stdio.h>
int fun(int n,int minNum,int maxNum){
int tot,i;
if(n==0)
return 1;
tot=0;
for(i=minNum;i<=maxNum;i++)
tot+=fun(n-1,i+1,maxNum);
return tot;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
printf("%d\n",fun(m,1,n));//觉得此处挺奇怪的,查过pdf文档,发现确实如此
return 0;
}
//输入:6 3
3.
//2014.4.3
#include <stdio.h>
#include <string.h>
const int SIZE=100;
const int LENGTH=25;
// strcmp(a, b) < 0: a的字典序小于 b
// strcmp(a, b) = 0: a和 b一样
// strcmp(a, b) > 0: a的字典序大于 b
int main(){
char dict[SIZE][LENGTH+1];
int rank[SIZE],ind[SIZE];
int i,j,n,tmp;
scanf("%d",&n);
for(i=1;i<=n;i++){
rank[i]=i;
ind[i]=i;
scanf("%s",dict[i]);
}
for(i=1;i<n;i++)
for(j=1;j<=n-i;j++)
if(strcmp(dict[ind[j]],dict[ind[j+1]])>0){
tmp=ind[j];
ind[j]=ind[j+1];
ind[j+1]=tmp;
}
for(i=1;i<=n;i++)
rank[ind[i]]=i;
for(i=1;i<=n;i++)
printf("%d ",rank[i]);
printf("\n");
return 0;
}
/*
7
aaa
aba
bbb
aaa
aaa
ccc
aa
*/
4.
//2014.4.4
#include <stdio.h>
const int SIZE=100;
int alive[SIZE];
int n,m,num;
int next(int num){
do{
num++;
if(num>n)
num=1;
}while(alive[num]==0);
return num;
}
int main(){
int i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
alive[i]=1;
num=1;
for(i=1;i<=n;i++){
for(j=1;j<=m-1;j++)
num=next(num);
printf("%d ",num);
alive[num]=0;
if(i<n)
num=next(num);
}
printf("\n");
return 0;
}
//输入:11 3
问题解答:
1.思考过程,如图所示:
答案:8
程序统计7-31之间能被3整除的个数。
耗时:2分钟
2.思考过程如图所示:
答案:20
耗时:10分钟
3.一看到程序中有冒泡排序,立马觉得很轻松,思考过程如图所示:
答案:2 5 6 3 4 7 1
耗时:5分钟
1.第二十一届(NOIP2015)
问题:
1.
//2015.4.1
#include <stdio.h>
struct point{
int x;
int y;
};
struct EX{
int a;
int b;
struct point c;
};
int main(){
struct EX e;
e.a=1;
e.b=2;
e.c.x=e.a+e.b;
e.c.y=e.a*e.b;
printf("%d,%d\n",e.c.x,e.c.y);
return 0;
}
2.
//2015.4.2
#include <stdio.h>
void fun(char *a,char *b){
a=b;
(*a)++;
}
int main(){
char c1,c2;
char *p1,*p2;
c1='A';
c2='a';
p1=&c1;
p2=&c2;
fun(p1,p2);
printf("%c%c\n",c1,c2);
return 0;
}
3.
//2015.4.3
#include <stdio.h>
#include <string.h>
int main(){
int i,len,maxlen;
char s[256],ss[256];
maxlen=0;
do{
scanf("%s",ss);
len=strlen(ss);
if(ss[0]=='#')
break;
if(len>maxlen){
strcpy(s,ss);
maxlen=len;
}
}while(1);
printf("%s\n",s);
return 0;
}
/*
I
am
a
citizen
of
China
#
*/
4.
//2015.4.4
#include <stdio.h>
int fun(int n,int fromPos,int toPos){
int t,tot;
if(n==0)
return 0;
for(t=1;t<=3;t++)
if(t!=fromPos&&t!=toPos)
break;
tot=0;
tot+=fun(n-1,fromPos,t);
tot++;
tot+=fun(n-1,t,toPos);
return tot;
}
int main(){
int n;
scanf("%d",&n);
printf("%d\n",fun(n,1,3));
return 0;
}
//输入:5
问题解答:
1.
2.
3.