第一次测试

来源:互联网 发布:mac ntfs读写插件破解 编辑:程序博客网 时间:2024/05/07 06:42

                                                  第一次测试

之前新创建的博客,要三天之后才能上传博文,所以到今天才上传上一次的题目。


      1171 Problem A: a + b ——C语言初学者百题大战之四

 

Description

上一题过的轻松吗?是不是老忘了scanf函数的格式?特别是那个&?以后不要再忘了哦? 
那么再来一题吧。这题要求计算a+b的和了。 

Input

输入2个整数a和b,中间用一个空格隔开 

Output

输出为三行, 
第1行输出 a=a,其中红色的a代替a的值, 
第2行输出 b=b,其中红色的b代替b的值, 
第3行输出 s=s,其中红色的s代替a+b的和,然后再换行。 

Sample Input

1 2

Sample Output

a=1b=2s=3



源代码:


#include<stdio.h>
int main()
{
int a,b,s;
     scanf("%d%d",&a,&b);
printf("a=%d\n",a);
     printf("b=%d\n",b);
     printf("s=%d\n",a+b);
return 0;
}



结果截图:


 

第一次用c++写没通过,他们说是系统问题,不能用c++,后来改为c 就可以了。

 


        1067  Problem C:   HBUT

 

Description

观察以下图片 

Input

输入为一个字符,可能为任意大小写字母和@!#$%^&*()字符中的任意一个。

Output

输出由该字符组成的形如上图的HBUT

Sample Input

@

Sample Output

如上图



源代码:


#include<stdio.h>
int main()
{
char a;
scanf("%c",&a);
printf("%c   %c %c%c%c%C  %c   %c %c%c%c%c%c\n",a,a,a,a,a,a,a,a,a,a,a,a,a);
printf("%c   %c %c   %c %c   %c   %c\n",a,a,a,a,a,a,a);
printf("%c   %c %c   %c %c   %c   %c\n",a,a,a,a,a,a,a);
printf("%c%c%c%c%c %c%c%c%c  %c   %c   %c\n",a,a,a,a,a,a,a,a,a,a,a,a);
printf("%c   %c %c   %c %c   %c   %c\n",a,a,a,a,a,a,a);
printf("%c   %c %c   %c %c   %c   %c\n",a,a,a,a,a,a,a);
printf("%c   %c %c%c%c%c   %c%c%c    %c\n",a,a,a,a,a,a,a,a,a,a);
return 0;

}

结果截图:


 



之前在初级程序设计的考试的时候做过这个题,也做出来了, 关键就是根据图片上的空格依次输出字符。空格的地方和要输出字符的个数不能错误了。


  1000 Problem D: A+B Problem

Description

Calculate a+b

Input

Two integer a,b (0<=a,b<=10)

Output

Output a+b

Sample Input

1 2

Sample Output

3



源代码:
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
     printf("%d\n",a+b);
}
return 0;

}

结果截图:

              




      这个题目和第一个一样的,重点就是要实现重复输入功能。

    思考:但是c++中怎么实现重复输入呢?
                 使用   while((cin>>a>>b))   就可以了。



   1172 Problem B:求较大的数——C语言初学者百题大战之七


Description

求较大的数 

Input

输入2个整数a和b,用一个或几个空格隔开 

Output

输出其中较大的数,并换行 

Sample Input

4 5

Sample Output

5




源代码:
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a>b)
     printf("%d\n",a);
else
      printf("%d\n",b);
}
return 0;

}

结果截图:



 


这个题目试过好多次,用了好多种方法, 结果最后他们说是系统答案错误,学长改了之后,直接提交就可以了………




          1165  Problem E: ID card


Description

密码学家亘古教授,破解了居民身份证号的密码,他可以分辨出身份证号的真假,还能猜出你身份证最后一位数字。下面是亘古教授计算身份证号末位的办法 
1.计算校验位 
∑(id[i]×Sec[i])(mod 11) //身份证前17位乘对应的校验位的和,对11取模 
Sec[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2} 

2.通过校验位得出真实数字 
校验位  0 1 2 3 4 5 6 7 8 9 10 
真实数字 1 0 X 9 8 7 6 5 4 3 2 
亘古教授想请我们HBUT的天才们设计一个程序,当输入身份证号前17位时补全第18位,当输入18位身份证号时验证它的真假。

Input

输入17位或者18位长度的N行字符串

Output

当输入的18位身份证为真时输出 True 
当输入的18位身份证为假时输出 False 
当输入身份证前17位时完整输出该身份证号码

Sample Input

4205831989060400142058319890604001042058319890604001X

Sample Output

420583198906040010TrueFalse

Hint

特别提示,身份证末尾X为大写。




源代码:
#include<stdio.h>
#include<string.h>
int main()
{
    char a[20];
char b[12]={"10X98765432"};

int Sec[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    while(scanf("%s",&a)!=EOF)
{
int i,t,s=0;
for(i=0;i<17;i++)
s=(a[i]-'0')*Sec[i]+s;
t=s%11;
if(strlen(a)==17)
printf("%s%c\n",a,b[t]);
else
{
if(a[17]==b[t])
printf("True\n");
else
printf("False\n");
        }
}
return 0;

}
结果截图:


 

老实说这个题目首先就没看懂,琢磨了好半天,后来才知道是输入身份证号,先看前17位,身份证前17位乘对应的校验位的和,对11取模,然后对比,当输入身份证号前17位时补全第18位,当输入18位身份证号时验证它的真假。
并且为了防止转换成ASCII码,要用s=(a[i]-'0')*Sec[i]+s; 减去‘0’;先比较长度是否等于17,等于就输出前17位和正确的第18位,如果等于18,则和表中对应的结果来判断。

第一次是提交的时候没过,后来发现输出的时候的文字写错了,改后就通过了。

 


感觉ACM很注重格式。有的时候用VC 6.0可以提交,但是却过不了。

 

 

 

原创粉丝点击