Educator: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;
int main()
{
    /********** Begin ********/
  int a,n,sum=0;  
    cin >> a >>n;
  int b=a;
    if(n>1){for(int z=1;z<=n;z++){
        int x=b;
        sum+=a;
        for(int i=1;i<=z;i++)x*=10;
        a+=x;
         }
        }
        if(n==1)sum =a;
          cout << sum;
    /********** End **********/
}

第2关:求平均值


任务描述

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

编程要求

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

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

输出: 1.16667

#include <iostream>
using namespace std;

int main()
{
    /********** Begin ********/
int n=0;
double sum=0;
int a[1000];
cin >> n;  
for(int z=0;z<n;z++){
   cin >> a[z];
   sum +=a[z];
}
cout << sum/n;
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()
{
    int x[12];
    int a,b,c,d;
for(int i=0;i<12;i++){cin >>x[i];}
a = x[1]+x[3]+x[5]+x[7]+x[9]+x[11];
a*=3;
b = x[0]+x[2]+x[4]+x[6]+x[8]+x[10];
c =a+b;
d =c%10;
if(d!=0)d = 10-d;
else d=0;
for(int z=0;z<12;z++)cout <<x[z];
cout << d;
    /********** 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()
{
    /********** 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 num = 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(num == m)    
        {        
int x = 11-(10*d+9*e+8*f+7*g+6*h+5*i+4*j+3*k+2*l)%11;        
        if(x == 10)                    
        cout<<d<<e<<f<<g<<h<<i<<j<<k<<l<<'x';        
        else if(x == 11)               
        cout<<d<<e<<f<<g<<h<<i<<j<<k<<l<<0;        
        else          
        cout<<d<<e<<f<<g<<h<<i<<j<<k<<l<<x;          
        }    
    else    
    {       
    cout<<"Error";    
    }    
    return 0;
    /********** End **********/
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值