第五章:新生赛的挑战(1/1)

时间过得飞快,转眼间就到了新生赛的日期。薛小松这几天一直在紧张地复习和刷题,他的目标很明确——进入ACM集训队。为了这一天,他几乎放弃了所有休息时间,全身心投入到C语言的学习中。他的努力并非没有回报,半个月的高强度训练让他的编程能力有了质的飞跃,从最初的初级一品提升到了初级三品。他甚至在课余时间刷完了《C语言程序设计基础》这本书的所有练习题,还额外学习了一些简单的数据结构知识。

比赛当天,体育馆里坐满了参赛的学生,气氛紧张而热烈。薛小松坐在自己的位置上,深吸一口气,试图平复内心的激动。他知道自己已经准备得很充分了,但比赛的压力仍然让他有些紧张。

“小松,别紧张,你准备得很充分,肯定没问题!”旁边的队友李强拍了拍他的肩膀,轻声说道。李强是薛小松的高中同学,也是他大学里的室友,两人关系一直很好。他虽然没有薛小松那么强的编程基础,但他对比赛的热情丝毫不逊色。

薛小松喃喃道:“希望如此吧,我可不想再错过这次机会。”

“你肯定行的!”李强鼓励道,“要是我有你一半的水平,我也不用在这儿干着急了。”

薛小松笑了笑,没有再说话。他能感受到李强的紧张,毕竟比赛的氛围确实让人有些喘不过气来。

比赛题目很快公布,一共五道题,涵盖了从基础的循环结构到较为复杂的函数和数组应用。薛小松迅速浏览了一遍题目,心中已经有了大致的思路。

他从第一题开始,手指飞快地在键盘上敲击,代码一行行地出现在屏幕上。第一题相对简单,是经典的“水仙花数”问题:找出所有三位数中,其各位数字的立方和等于其本身的数。

```c

#include

int main(){

int i, a, b, c;

printf(“水仙花数有:\n“);

for (i = 100; i < 1000; i++){

a = i / 100;//百位

b =(i / 10)% 10;//十位

c = i % 10;//个位

if (i == a * a * a + b * b * b + c * c * c){

printf(“%d\n“, i);

}

}

return 0;

}

薛小松迅速敲完代码,提交后顺利通过了测试。他松了口气,接着迅速转向第二题。第二题是一道关于数组排序的题目,要求用冒泡排序对一个包含10个整数的数组进行升序排序。

#include

void bubbleSort(int arr[], int n){

int i, j, temp;

for (i = 0; i < n - 1; i++){

for (j = 0; j < n - 1 - i; j++){

if (arr[j]> arr[j + 1]){

temp = arr[j];

arr[j]= arr[j + 1];

arr[j + 1]= temp;

}

}

}

}

int main(){

int arr[]={64, 34, 25, 12, 22, 11, 90, 88, 76, 43};

int n = sizeof(arr)/ sizeof(arr[0]);

bubbleSort(arr, n);

printf(“排序后的数组:\n“);

for (int i = 0; i < n; i++){

printf(“%d“, arr[i]);

}

return 0;

}

凭借这段时间的积累,薛小松很快找到了最优解,顺利拿下第二题。比赛进行到一半时,薛小松已经完成了三道题。他抬头看了看周围,发现很多人都还在为第二题挣扎,心中不禁有些自豪。

“小松,你真厉害,已经做完三题了?”旁边的队友小李惊讶地说道。

薛小松微微一笑:“别夸我,后面还有两题呢,难度可不小。”

但他没有松懈,继续投入到第四题的思考中。第四题是一道较为复杂的函数嵌套问题,要求编写一个函数,计算斐波那契数列的第n项。

薛小松仔细分析题目,脑海中不断模拟各种可能的解法。经过一番努力,他终于找到了一个可行的方案,开始敲代码。

#include

int fibonacci(int n){

if (n <= 0){

return 0;

} else if (n == 1){

return 1;

} else {

return fibonacci(n - 1)+ fibonacci(n - 2);

}

}

int main(){

int n;

printf(“请输入n:“);

scanf(“%d“,&n);

printf(“斐波那契数列的第%d项是:%d\n“, n, fibonacci(n));

return 0;

}

然而,当他提交测试时,系统却显示错误。薛小松没有慌乱,他仔细检查代码,发现了一个细微的逻辑错误——递归函数的效率太低,容易超时。

“该死,我怎么没想到优化一下?”薛小松低声咒骂了一句。

他迅速修改代码,采用动态规划的方式重新实现。

#include

int fibonacci(int n){

if (n <= 0){

return 0;

}

int a = 0, b = 1, c;

for (int i = 2; i <= n; i++){

c = a + b;

a = b;

b = c;

}

return b;

}

int main(){

int n;

printf(“请输入n:“);

scanf(“%d“,&n);

printf(“斐波那契数列的第%d项是:%d\n“, n, fibonacci(n));

return 0;

}

修改后,他再次提交,这次顺利通过。此时,距离比赛结束还有不到半小时,他迅速将注意力转向最后一题。

最后一题是一道综合性的题目,要求编写一个程序,输入一个字符串,统计其中的字母、数字和空格的数量。

薛小松深吸一口气,开始认真思考。时间一分一秒地过去,他终于在比赛结束前几分钟完成了代码。

#include

int main(){

char str[100];

int letters = 0, digits = 0, spaces = 0;

printf(“请输入一个字符串:“);

fgets(str, sizeof(str), stdin);

for (int i = 0; str[i]!='\0'; i++){

if ((str[i]>='a'&& str[i]<='z')||(str[i]>='A'&& str[i]<='Z')){

letters++;

} else if (str[i]>='0'&& str[i]<='9'){

digits++;

} else if (str[i]==''){

spaces++;

}

}

printf(“字母数量:%d\n“, letters);

printf(“数字数量:%d\n“, digits);

printf(“空格数量:%d\n“, spaces);

return 0;

}

```

提交后,系统显示“通过”,薛小松终于松了口气。比赛结束后,他疲惫地走出体育馆,心中既紧张又期待。他知道自己的表现不错,但比赛的结果还需要等待。

“小松,你太厉害了,最后一题我也卡住了,你居然做出来了!”小李追上薛小松,满脸钦佩地说。

薛小松笑了笑:“运气好而已,回去等结果吧。”

“运气?我看是实力!”小李调侃道,“你这段时间的努力可不是白费的。”

薛小松没有回应,只是微微一笑。他知道,这次比赛的结果对他来说至关重要。如果能进入ACM集训队,他将有机会接触到更高级的编程知识和竞赛训练,这对于他未来的职业发展有着不可估量的意义。

回到宿舍,薛小松躺在床上,闭上眼睛,脑海中还在回放着比赛的场景。他想起了自己在大学四年里的颓废,想起了毕业时的迷茫和无奈,也想起了这次重生的机会。他暗暗发誓,一定要抓住这次机会,改变自己的命运。

第二天,比赛结果公布。薛小松早早地来到教室,和小李一起等待成绩的公布。教室里坐满了参赛的学生,大家都显得有些紧张。薛小松的心跳得厉害,但他努力让自己保持冷静。

终于,比赛的负责人走了进来,手里拿着一份名单。他清了清嗓子,说道:“恭喜以下同学进入ACM集训队……”

薛小松紧紧握住小李的手,眼睛一眨不眨地盯着负责人手中的名单。

“薛小松……”当这个名字被念到时,薛小松的心跳几乎要跳出嗓子眼,他感到一阵难以抑制的激动。旁边的队友小李猛地拍了一下他的肩膀,大声说道:“恭喜啊!我就知道你能行!”周围的同学们也纷纷投来羡慕的目光,这让薛小松的脸微微有些发烫。

他站起身,接过负责人递过来的集训队录取通知,心中充满了复杂的情绪。这一刻,他仿佛看到了自己未来的可能性,那些曾经因为懒惰和放纵而错失的机会,如今似乎又重新回到了他的手中。

“小松,你真是太厉害了!”小李还在兴奋地说道,“以后可要多带带我啊!”

薛小松笑了笑,点了点头,心中却在想:这次机会来之不易,我一定要好好珍惜。