C++实训练习册(C++之基础语法进阶练习题)

第1关:相同数字不同位数之和

任务描述

本关任务:编写一个能计算相同数字不同位数之和 的小程序。

编程要求

求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字,最后一项的位数为n。

例如用户输入a=1,n=3时表示要求1+11+111。

效果如下: 输入:1 2 输出:12


开始你的任务吧,祝你成功!

代码:

#include <iostream>
using namespace std;

size_t Sum(size_t a, size_t n)
{
	size_t sum = a, tmp = a;
	size_t i = 0;
	for (i = 1; i < n; i++)
	{
		tmp = tmp * 10 + a;
		sum += tmp;
	}
	return sum;
}

int main()
{
	int a = 0, n = 0;
	cin >> a >> n;
	cout << Sum(a, n);
	return 0;
}

第2关:求平均值

任务描述

本关任务:编写一个能计算n个整数的平均值的小程序。

编程要求

扫描二维码关注公众号,回复: 14874230 查看本文章

从键盘输入n个整数,编写程序计算其中所有整数的平均值。 输入包括2行: 第一行包含一个整数,表示输入的整数个数n, 第二行包含n个整数,用空格分隔。

效果如下: 输入: 6 -1 3 6 0 -5 4

输出: 1.16667


开始你的任务吧,祝你成功!

代码:

#include <iostream>
using namespace std;

int main()
{

    //获取参数方式 cin
    //int x =0;
    //cin >> x;

    //结果输出使用 cout
    //cout<<"1";

     // 请在此添加你的代码
    /********** Begin ********/
    int a,b;        
    float sum,s;    
    cin>>a;    
    for(int i=1;i<=a;i++)
    {        
	    cin>>b;        
	    sum=sum+b;           
    }    
    s=(sum)/a;    
    cout<<s;
    return 0;
    /********** End **********/
}

第3关:生成ISBN13编码

任务描述

本关任务:编写一个能生成ISBN13编码的小程序。

相关知识

SBN13号在2007年正式启用每本书的ISBN13号由五个部分构成:

  • 978(或979);
  • 出版国家或语言代码;
  • 出版社代码;
  • 书代码;
  • 校验码。

例如:《C++程序设计(第2版)》的ISBN13号是978-7-302-21897-5,其中5为校验码。

算法

示范数据:7-5080-2710-8

  • 去掉末尾校验码8,前面统一加上978(中国),为:978750802710
  • 从代码位置序号2开始,所有偶数位的数字代码求和为a, 7 + 7 + 0 + 0 + 7 + 0 = 21
  • 将a乘以3为a, 21 * 3 = 63
  • 从代码位置序号1开始,所有奇数位的数字代码求和为b,9 + 8 + 5 + 8 + 2 + 1 = 33
  • 将a和b相加为c, 63 + 33 = 96
  • 取c的个位数d(如果最后算出的个位数d为0的话,则校验值数值为0)。 个位:6
  • 用10减去d即为校验位数值,将它置于最后一位。10 - 6 = 4
  • 条形码为:9 7 8 7 5 0 8 0 2 7 1 0 4

编程要求

根据输入的ISBN13前四部分和校验算法,生成完整的ISBN13代码并输出。

注意:因为是机器自动判题,我们约定输入的前四部分的每位数字之间用空格隔开。

例如输入9 7 8 7 3 0 2 2 1 8 9 7,输出9787302218975。

效果如下: 输入:9 7 8 7 3 0 2 2 1 8 9 7 输出:9787302218975


开始你的任务吧,祝你成功!

代码:

#include <iostream>
using namespace std;

int main()
{

    //获取参数方式 cin
    //int x =0;
    //cin >> x;

    //结果输出使用 cout
    //cout<<"1";

     // 请在此添加你的代码
    /********** Begin ********/
    int a,b,c,d,e,f,g,h,i,j,k,l,s,m,n;                      
    cin>>a>>b>>c>>d>>e>>f>>g>>h>>i>>j>>k>>l;
    s=a*1+b*3+c*1+d*3+e*1+f*3+g*1+h*3+i*1+j*3+k*1+l*3;     
    m=s%10;   
    n=10-m;   
    if(n==10)       
        cout<<a<<b<<c<<d<<e<<f<<g<<h<<i<<j<<k<<l<<'0';   
    else 
        cout<<a<<b<<c<<d<<e<<f<<g<<h<<i<<j<<k<<l<<n;    
    return 0;  
    /********** End **********/
}

第4关:ISBN13和ISBN10的转换

任务描述

本关任务:编写一个能转换ISBN13和ISBN10的小程序。

相关知识

2007年之前国际标准书号使用ISBN10编码,ISBN10编码由4部分构成:出版国家或语言代码、出版社代码、书代码、校验码。而且,ISBN10的校验算法与ISBN13不同。

算法

10位ISBN的校验码计算公式:

  • ISBN最右1位为校验位,由前9位通过公式计算得出,同时可以检验ISBN号的正确与否,下面给出一个简单易记的校验码计算公式,从左至右的前9位,每1位数与10至2的9个数加权求和,然后计算和与11的余数,最后求11与余数的差,差即为校验码; 例: ISBN: 7802253217  11-((7*10+8*9+0*8+2*7+2*6+5*5+3*4+2*3+1*2)%11)=7  如差为10,则校验码为X; 如差为11,则校验码为0

13位ISBN的校验码计算公式:

  • ISBN最右1位为校验位,由前12位通过公式计算得出,同时可以检验ISBN号的正确与否,下面给出一个简单易记的校验码计算公式,从左至右的前12位,每1位数依次与1和3这2个数加权求和,然后计算和与10的余数,最后求10与余数的差,差即为校验码; 例: ISBN: 9787802253216  10-((9*1+7*3+8*1+7*3+8*1+0*3+2*1+2*3+5*1+3*3+2*1+1*3)%10)=6  如差为10,则校验码为0

编程要求

要求:在上一关练习题基础上,输入一个ISBN13码,首先通过校验算法判断其是否合法,是则输出对应的ISBN10编码(中间没有空格),否则输出“Error”。

详细情况和校验算法见附加的维基百科的说明文档。 注意:因为是机器自动判题,我们约定输入的前四部分的每位数字之间用空格隔开。

效果如下:

输入:9 7 8 7 3 0 2 2 1 8 9 7 5 输出:7302218974


开始你的任务吧,祝你成功!

代码:

#include <iostream>
using namespace std;

int main()
{

    //获取参数方式 cin
    //int x =0;
    //cin >> x;

    //结果输出使用 cout
    //cout<<"1";

     // 请在此添加你的代码
    /********** Begin ********/
    int a,b,c,d,e,f,g,h,i,j,k,l,m,S,N,M;           
    cin>>a>>b>>c>>d>>e>>f>>g>>h>>i>>j>>k>>l>>m;    
    int checksum = 10-(a*1+b*3+c*1+d*3+e*1+f*3+g*1+h*3+i*1+j*3+k*1+l*3)%10;    
    if(checksum == m)    
        {        
int finnal_bit = 11-(10*d+9*e+8*f+7*g+6*h+5*i+4*j+3*k+2*l)%11;        
        if(finnal_bit == 10)                    
        cout<<d<<e<<f<<g<<h<<i<<j<<k<<l<<'x';        
        else if(finnal_bit == 11)               
        cout<<d<<e<<f<<g<<h<<i<<j<<k<<l<<0;        
        else          
        cout<<d<<e<<f<<g<<h<<i<<j<<k<<l<<finnal_bit;          
        }    
    else    
    {       
    cout<<"Error";    
    }    
    return 0;
    /********** End **********/
}

猜你喜欢

转载自blog.csdn.net/weixin_62174595/article/details/127140441
今日推荐