NOIP 提高组 初赛 四、阅读程序写结果 习题集(九)NOIP2014-NOIP2015

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分钟

4.


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.


4.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值