关键词:
北京中关村;海淀黄庄;北京大学;清华大学。少儿编程;中小学编程;信息学竞赛;计算机竞赛;NOIP竞赛;CSP-J/S竞赛;NOI竞赛。1998年、提高组、复赛,第4届。
A、试题类型:
多答案。
B、算法模型:
递推、经典数学公式套用等。
C、试题说明:
思路1:
枚举。枚举第二站上、下车的人数,然后根据题目给出的递推关系判断是否正确。这里的递推关系很清晰,注意数据规模。
思路2:
递推。把每站上、下车的人数和上、下车后的总人数用一张表列出来:
车站: 1 2 3 4 5 ……
总数: a a 2a 2a+x 3a+2x ……
上: a x a+x a+2x 2a+3x ……
下: 0 x x a+x a+2x ……
一种简单的方法是根据这个规律使用计算机进行模拟公式计算,可以定义一个结构体类型来表示公式,也可以使用数组,使用结构体是为了表达更清晰:
struct gs{
int a; //a的个数
int x; //x的个数 公式=ka+jx
}
struct {
gs up; //上的人数
gs down; //下的人数
gs rs; //上、下车后的总人数
}Chezhan[21];
使用循环模拟上面的上、下车过程。
Chezhan[i].up=Chezhan[i-1].up+Chezhan[i-2].up;
Chezhan[i].down=Chezhan[i-1].up; //这样用要使用运算符重载
最后得到公式是:ka+jx=m,k和j的值在过程中可以计算出来,m和a是已知的。
求解x的过程中如果可以除尽,说明有有效值。如果(m-ka)%j!==0,说明除不尽,答案为No Answer.。有了x的值,代入p号站的rs公式中即可得到结果。代码例程1说明了计算过程。
思路3:
对斐波那契数列相关属性的运用。通过公式的推导,可以最大可能的提高运算效率。这里涉及到的数列属性最好能够记下来。
#include<iostream>
using namespace std;
struct gs
{ //定义公式结构体
int a;
int x;
};
struct
{ //定义车站数组
gs rs;
gs up;
gs down;
}INFO[21];
int main()
{
int a, n, m, p, x;
scanf("%d%d%d%d", &a, &n, &m, &p);
INFO[1].up.a=1; //初始信息
INFO[2].up.x=1;
INFO[2].down.x=1;
INFO[1].rs.a=1;
INFO[2].rs.a=1;
for(int i=3; i<n; i++)
{ //在循环中递推
INFO[i].up.a=INFO[i-1].up.a+INFO[i-2].up.a;
INFO[i].up.x=INFO[i-1].up.x+INFO[i-2].up.x;
INFO[i].down.a=INFO[i-1].up.a;
INFO[i].down.x=INFO[i-1].up.x;
INFO[i].rs=INFO[i-1].rs;
INFO[i].rs.a+=INFO[i].up.a;
INFO[i].rs.a-=INFO[i].down.a;
INFO[i].rs.x+=INFO[i].up.x;
INFO[i].rs.x-=INFO[i].down.x;
//printf("%d*a+%d*x\n", INFO[i].rs.a, INFO[i].rs.x);调试代码,输出过程中数据
}
if((m-INFO[n-1].rs.a*a)%INFO[n-1].rs.x)
{//x不能整除,无答案
printf("No answer.");
return 0;
}
else
{ //x可以被整除
x=(m-INFO[n-1].rs.a*a)/INFO[n-1].rs.x;
printf("%d", INFO[p].rs.a*a+INFO[p].rs.x*x);
}
return 0;
}
A、试题类型:
字符串问题。
B、算法模型:
stl应用。
C、试题说明:
用字符串读入,排个序输出。
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string s[25];
bool cmp(string a,string b)
{
return a+b>b+a;
}
int main()
{
int n,i,j,k;
scanf("%d",&n);
for(i=1;i<=n;i++)
cin>>s[i];
sort(s+1,s+1+n,cmp);
for(i=1;i<=n;i++)
cout<<s[i];
cout<<endl;
return 0;
}
A、试题类型:
数学问题。
B、算法模型:
矩阵考察。
C、试题说明:
“+”号不管,最上面一行和最左边一行不管,从剩下的(N-1)*(N-1) 的矩阵中数单个字母的个数,个数减一是每个字母的值。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char tmp[256];
char u[10];
int v[10];
int main()
{
int n;
char cv;
scanf("%d\n+",&n);
n--;
for(int i=0;i<n;i++)
scanf(" %c",&cv),u[i]=cv;
for(int i=0;i<n;i++)
{
scanf("\n%c",&cv);
for(int j=0;j<n;j++)
{
scanf(" %s",tmp);
if(strlen(tmp)==1)
{
for(int k=0;k<n;k++)
{
if(u[k]==tmp[0])
{
v[k]++;
break;
}
}
}
}
}
for(int i=0;i<n;i++)
printf("%c=%d ",u[i],v[i]-1);
printf("\n%d",n);
return 0;
}
IT航班支持----中小学编程比赛汇总:
第一部分:国内比赛(IT航班支持)
1、软件能力认证(CSP-JS)
2、全国青少年信息学奥林匹克联赛(NOIP)
3、全国青少年信息学奥林匹克竞赛(NOI)
4、中国青少年………………………
5、………………………创新挑战赛
6、全国青少年………………………
7、………………………
8、 恩欧希教育信息化发明创新奖
9、世界机器人大赛(WRC)
10、………………………大赛
11、少………………………智能教育成果展示大赛
12、“明天小小科学家”奖励活动
13、………………………
14、………………………
15、国际信息学………………………
16、………………………
第二部分:国际比赛(IT航班支持)
17、………………………
18、国际………………………
19、………………………
20、美国信息学………………………
21、加拿大………………………
22、官方邀请赛 (CCO)
23、国际计算思维………………………
24、美国计算机………………………
25、澳大利亚………………………
第三部分:企业比赛(IT航班支持)
26、微软MTA
27、………………………挑战赛
28、………………………科学奖
29、………………………学奖
30、………………………创新挑战赛
31、………………………挑战赛
32、………………………芯计算机表演赛
33、………………………大赛
第四部分:Scratch相关竞赛(IT航班支持)
34、全国中小学生电脑制作大赛
35、………………………
36、………………………
37、………………………
第五部分:其它(IT航班支持)
38、NOI夏令营
39、NOI冬令营(NOIWC)
40、全国青少年………………………
41、国际青少年………………………
联系方式:
A、官方网址:
B、微信公众号:
添加微信,获取资料。
关注公众号,获取动态。