NOIP 普及组 2011 阅读程序写结果题

2011题目一

#include<iostream>
using namespace std;
int main(){
    int i,n,m,ans;
    cin>>n>>m;
    i=n;
    ans=0;
    while(i<=m){
       ans+=i;
       i++;
    }
    cout<<ans<<endl;
    return 0;
}

输入:10 20
输出:165

解析:
本题主要考察了while循环

n的值是10,m的值是20,当i小于20的时候,每次用ans来计算求和,用i++来计算循环次数
循环判断时i的值为: 10 11 12 13 14…20
每次while循环后i的值是: 11 12 13 14 15…21
每次while循环后ans的值是: 10 21 33 46 60…165
其实根据上面的变化规律就能看出ans的值为之前值的和,33是21+10,46是33+21+10

2011题目二

#include<iostream>
#include<string>
using namespace std;
int main(){
    string map= "2223334445556667778889999";
    string tel;
    int i;
    cin>>tel;
    for(i=0;i<tel.length();i++)
       if((tel[i]>='0') && (tel[i]<='9') )
           cout<<tel[i];
       else if( (tel[i]>='A') && (tel[i]<='Z'))
           cout<<map[tel[i]-'A'];
    cout<<endl;
    return 0;
}

输入: CCF-NOIP-2011
输出:223 6647 2011

解析:
本题主要考察了for循环,if条件判断,逻辑运算

tel字符串赋值为CCF-NOIP-2011,字符串的长度为13,
if((tel[i]>=‘0’) && (tel[i]<=‘9’) ) 表明了字符串里的值在字符0-9之间有2011,因此最后输出了2011
if( (tel[i]>=‘A’) && (tel[i]<=‘Z’)) 满足这个的字符有CCF和NOIP
map[tel[i]-‘A’] 输出了map[]数组中下标为C-‘A’ …P-'A’的值
数组下标分别为 2、2、5、13、14、8、15
对应字符串的值为 2、2、3、6、 6、 4、 7

2009题目三

#include<iostream>
#include<cstring>
using namespace std;
const int SIZE = 100;
int main(){
    int n,i,sum,x,a[SIZE];
    cin>>n;
    memset(a,0,sizeof(a));
    for(i=1;i<=n;i++){
        cin>>x;
        a[x]++;
    }
    i=0;
    sum=0;
    while(sum<(n/2+1)){
        i++;
        sum+=a[i];
    }
    cout<<i<<endl;
    return 0;
}

输入:11
输入:4 5 6 6 4 3 3 2 3 2 1
输出: 3

解析:
主要考察for循环

n = 11,p = 2; s = 0;t=1;
外层for循环一共循环10次,里层for循环一共循环1 ,2,3…10次
每次的变化如下:
t = 1 * 2 % 2009 = 2 S = 2 % 2009 = 2
t = 2 * 2 % 2009 = 4 S = 6 % 2009 = 6 S =10 % 2009 = 10

每次 for循环中 t 的值分别为:2、4、8、16、32、64、128、256、512、1024、39
这里%的优先级比 * 高
每次 for循环后 s 的值分别为:2、10、34、98、258、642、1538、1577、158、353、782

2011题目四

#include<iostream>
using namespace std;
int solve(int n,int m){
    int i,sum;
    if(m==1) return 1;
    sum=0;
    for(i=1;i<n;i++)
       sum+= solve(i,m-1);
    return sum;
}
int main(){
    int n,m;
    cin>>n>>m;
    cout<<solve(n,m)<<endl;
    return 0;
}

输入:7 4
输出:20

解析:
主要考察

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值