C语言作业2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
H1:计算通用产品代码(UPC)的校验位(选作)
许多年来,货物生产商都会把超市售卖的每件商品上放置一个条码。这种被称为通用产品代码(Universal Product Code,缩写UPC)的条码可以识别生产商和产品。超市可以通过扫描产品上的条码来确定支付此项商品的费用。每一个条码由十二位数字构成,通常这些数字会显示在条码下面。例如,包装为26盎司的Morton牌碘化盐所用条码下的数字是:0 24600 01003 0
第一个数字表示商品的种类(0表示大部分的食品杂货,2表示需要称量的货品,3表示药品或和健康相关的商品,而5表示优惠券)。接下来的一组五位数字用来识别生产商。而第二组五位数字则用来区分产品类型(其中包括包装尺寸)。最后一位数字是“校验位”,它可以帮助鉴别先前数字中的错误。如果条码扫描出现错误,那么前十一位数字和最后一位数字可能会不一致,而超市扫描机也会拒绝整个条码。
下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以3后再加上第二次加法的结果。随后,再把上述结果减去1。减法后的结果除以10取余数。最后,用9减去上一步骤中得到的余数。现在以Morton碘盐为例,第一组数字的加法是0+4+0+0+0+3=7,而第二组数字的加法是2+6+0+1+0=9。把第一组加法值乘以3后再加上第二组加法值得到的结果是30。再减去1,结果变为29。再把这个值除以10取余数为9。9在减去余数结果9,最终值为0
输入
每次输入三行数据,第一行是UPC的第一位数字,第二行是UPC的第一组五位数字,第三行是UPC的第二组五位数字。
输出
UPC的校验位
页脚内容1
测试输入期待的输出时间限制内存限制额外进程
测试用例1以文本方式显示
1.0↵
2.24600↵
3.01003↵
以文本方式显示
1.0↵
1秒64M 0
解法:
#include
main()
{
int a,b,c,q,e,f,g,h,i,j,k,m,n,p,x,y,z;
scanf("%1d",&a);
scanf("%1d%1d%1d%1d%1d",&b,&c,&q,&e,&f);
scanf("%1d%1d%1d%1d%1d",&g,&h,&i,&j,&k);
x=a+c+e+g+i+k;
y=b+q+f+h+j;
m=x*3+y;
页脚内容2
n=m-1;
z=n%10;
p=9-z;
printf("%d\n",p);
}
H2:数制转换(选作)
成绩: 5 / 折扣: 0.8
我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。
这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如12 和5 ,在十进制下它们是不等的,但若12 使用3 进制而5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制,12 和5 就可以是相等的。
程序的输入是两个数字M 和N( 其十进制的值不超过1000000000) ,它们的进制在2~36 之间。对于十以下的数字,用0~9 表示,而十以上的数字,则使用大写的A~Z 表示。
求出分别在2~36 哪种进制下M 和N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。
测试输入期待的输出时间
限制
内存限
制
额外
进程
页脚内容3
#define N 50
#include"string.h"
#include"stdio.h"
main()
{ char a[N],b[N],d[N],e[N],d0[N];
int i,j,o,r,g,h,w,t,l,k,max1,max2;
页脚内容4
double p[N],q[N]={0},u[N],v[N]={0},c[N],f[N],m,n;
for(i=0;i {scanf("%c",&a[i]); if(a[i]=='\x20') {l=i; break; } } gets(d); if(d[0]!='\x20') {k=strlen(d); goto C;} if(d[0]=='\x20') {strcpy(d0,d); g=strlen(d0); for(i=0;d0[i]=='\x20';i++); j=i; for(i=0;i k=g-j;} 页脚内容5 C:for(i=0;i {b[i]=a[l-i-1]; if(b[i]<='\x39'&&b[i]>='\x30') c[i]=b[i]-'0'; if(b[i]<='\x5A'&&b[i]>='\x41') c[i]=b[i]-'7'; } for(i=0;i {e[i]=d[k-i-1]; if(e[i]<='\x39'&&e[i]>='\x30') f[i]=e[i]-'0'; if(e[i]<='\x5A'&&e[i]>='\x41') f[i]=e[i]-'7'; } max1=c[0]; for(i=1;i {if(max1 if(max1==0) max1=1; max2=f[0]; for(i=1;i {if(max2 if(max2==0) max2=1; for(i=max1+1;i<=36;i++) 页脚内容6