当前位置 博文首页 > 丁世杰的博客:L1-080 乘法口诀数列 (20 分)

    丁世杰的博客:L1-080 乘法口诀数列 (20 分)

    作者:[db:作者] 时间:2021-09-01 16:17

    本题要求你从任意给定的两个 1 位数字 a 
    1
    ?
      和 a 
    2
    ?
      开始,用乘法口诀生成一个数列 {a 
    n
    ?
     },规则为从 a 
    1
    ?
      开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。
    
    输入格式:
    输入在一行中给出 3 个整数,依次为 a 
    1
    ?
     、a 
    2
    ?
      和 n,满足 0≤a 
    1
    ?
     ,a 
    2
    ?
     ≤9,0<n≤10 
    3
     。
    
    输出格式:
    在一行中输出数列的前 n 项。数字间以 1 个空格分隔,行首尾不得有多余空格。
    
    输入样例:
    2 3 10
    结尾无空行
    输出样例:
    2 3 6 1 8 6 8 4 8 4
    结尾无空行
    样例解释:
    数列前 2 项为 23。从 2 开始,因为 2×3=6,所以第 3 项是 6。因为 3×6=18,所以第 4、5 项分别是 1、8。依次类推…… 最后因为第 6 项有 6×8=48,对应第 10、11 项应该是 4、8。而因为只要求输出前 10 项,所以在输出 4 后结束。
    
    #include<iostream>
    #include<vector>
    using namespace std;
    vector<int> vec;
    int main()
    {
    	int n=0,a1=0,a2=0,temp=0,i=0;
    	cin>>a1>>a2>>n;
    	vec.push_back(a1);
    	vec.push_back(a2);
    	
    	for(i=0;;i++)
    	{
    		temp = vec[i]*vec[i+1];
    		if(temp>=10)	
    		{
    			vec.push_back(temp/10);
    			vec.push_back(temp%10); 
    		}
    		else 
    		{
    			vec.push_back(temp);
    		}
    		if(vec.size()>n) break;
    	}
    	for(i=0;i<n;i++)
    	{
    		cout<<vec[i]; 
    		if(i<n-1) cout<<" ";
    	}
    	return 0;
    }
    
    
    cs