CSDN编程大赛:数列问题解决方案

需积分: 9 9 下载量 80 浏览量 更新于2024-09-13 收藏 4KB TXT 举报
"CSDN 编程大赛中关于数列问题的个人解答代码,主要涉及计算数列的最后一位数字。" 在这个编程问题中,我们面临的是一个数列操作的任务,具体来说,我们需要处理一系列整数(1到n),并生成一个新的数列n1,其中n1的每个位置是原始数列中对应位置数字的乘积。例如,当n=11时,n1=1234567891011。接下来,我们从n1中移除所有偶数位数字得到n2(在本例中,n2=1357901)。然后,我们将这个过程继续进行,每次移除前一次数列中的某个位数字,直到只剩下一个数字为止,这个数字就是我们要找的n3(对于n2,n3=370)。 代码首先定义了两个关键函数: 1. `len(int n)`:该函数计算给定整数n的长度,即它包含的数字个数。通过不断地将n除以10并将结果累加到变量num上,直到n变为0,即可得到长度。 2. `remain(int n)`:这是核心函数,用于生成数列并去除指定位置的数字。首先,它创建一个足够大的数组b来存储数列中的所有数字。然后,将1到n的数列存储到b中,接着进行迭代,每次迭代时检查b中的数字,如果数字小于10(意味着它不是9),则进行特殊处理。在处理过程中,会将某些数字置为10,从而达到去除偶数位置数字的目的。迭代结束后,返回b数组中最后剩下的数字,即n3。 `Main`函数中,调用`remain(7)`来演示程序的运行,输出结果是处理后的数列的最后一个数字。 这段代码同时提供了C#和C++两种语言的实现,它们遵循相同的逻辑,但语法有所不同。C#版本使用了.NET框架,而C++版本则是标准C++实现。 这个问题涉及到了数列、位操作以及循环移除元素的算法设计。解决这个问题的关键在于正确地生成数列,并按照规则去除特定位置的数字,直至只剩下一个数字。在实际编程比赛中,这种问题测试了选手对数值处理和数组操作的理解,以及如何编写高效算法的能力。