寻光


私信TA

用户名:RITD

访问量:28148

签 名:

追寻最优解

等  级
排  名 424
经  验 4958
参赛次数 0
文章发表 13
年  龄 20
在职情况 学生
学  校 East Electricity
专  业 计科

  自我简介:

很菜所以很努力

TA的其他文章

解题思路:      1.按照题目的意思此题肯定要用循环,然后我们要在题目所给的公式找一种方法求解,(可能比较考验你的数学能力)

                    2.求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。这是题目,我们来想是先求完所有的数来相加,还是一次加一个,显然前者是行不通的,因为要是n太大你是不行的这种方法,我们来用后者的方法,此公式式也可写成 Sn = Sn-1 +aa...aaa(有n个a),Sn是前面(n-1)个数的和,for循环或while循环都能用此法,就是循环一次加前面(n - 1)个数的数之和加上现在的第n个数的值,现在我们要求的是第n个数的值为多少。

                        3.求第n个数的值为多少。这肯定也是要用到循环的,我们现在就是要找第n个数的值的规律,我们发现第二个数是前面第一个数的10倍再加上a的,第三个数是第二个数的10倍加上a......因此我们这么想第n个数是第n-1个数的10倍加上a,接着就是用代码解决这个问题 An = An * 10 +a,其中左边An 是第n个数的值,右边An是第n - 1个数的值,在代码for循环里就是这个意思。


                    4.理清完这个题目的数学问题,接着我们再想步骤解题。

                      i :声明变量这就不用说吧,我们要想清声明几个变量,不管是做那种题都一样,我们要声明的变量是来干什么的,要声明几个变量。

                            这里我们声明四个变量,分别为Sn(前n数的和),An(用于存储用户的输入),n(获取用户的输入),(i用于for循环),声明的过程并初始化。

#include <stdio.h>
int main(void)
{
    int Sn = 0, n, i , An = 0;
    
    scanf("%d", &n)  //获取用户输入
    return 0;
}

                    ii. 构造for循环 ,利用上面理清的数学关系

for (i = 0; i < n; i++)
{
     An = An * 10 + a;
     Sn = Sn + An;
}

                   iii.利用printf()输出即可

printf("%d", Sn);

   


            

注意事项: 1)不可在for循环声明并初始化Sn,这样生成的Sn具有块作用域,也就是在for循环里有用,在套嵌for循环的那个块无用,也就是说在大块里没有这个变量。这是我做题原本想在for循环里初始化发现行不同。

                   2)for循环别初始化,要不变量就一直是你初始化的那个值,因为循环一次,这个变量初始化为那个值


参考代码:

#include <stdio.h>
int main(void)
{
	int a = 2, Sn = 0, n;
	
	scanf("%d", &n);
	
	for (int i = 0, An = 0; i < n; i++)  //这里也可以用自减,不能声明初始化Sn,能声明初始化An
	{
	    An = 10*An + a;
	    Sn = Sn + An;	
	}
	printf("%d", Sn);
	
	return 0;
}


 

0.0分

1 人评分

  评论区

  • «
  • »