文章目录
入门篇(1)——入门模拟(3.5进制转换)
前言:今天去嘎嘎(外公外婆家)吃了年饭,祝大家新年快乐!^ _ ^
B1048 数字加密
//部分正确18'的答案
#include<stdio.h>
#include<string.h>
int main(){
char str_a[110];
char str_b[110];
char change[14]={'0','1','2','3','4','5','6','7','8','9','J','Q','K'};
scanf("%s %s",str_a,str_b);
int len_a=strlen(str_a),len_b=strlen(str_b),r=1,len;
if(len_b<len_a) len=len_b;
else len=len_a;
for(int i=0;i<len;i++){
if(r%2==1){
str_b[len_b-1-i]=change[(str_b[len_b-1-i]-'0'+str_a[len_a-1-i]-'0')%13];
r++;
}
else{
int temp;
temp=str_b[len_b-1-i]-str_a[len_a-1-i];
if(temp<0) temp+=10;
str_b[len_b-1-i]=change[temp];
r++;
}
}
if(len_a>len_b){
r=r-1+len_a-len_b;
for(int i=0;i<len_a-len_b;i++){
if(r%2==1){
printf("%c",str_a[i]);
r--;
}
else{
printf("%d",10-(str_a[i]-'0'));
r--;
}
}
}
puts(str_b);
}
//部分正确16'的答案
#include<stdio.h>
#include<string.h>
void reverse(char s[]){
int len=strlen(s),temp;
for(int i=0;i<len/2;i++){
temp=s[i];
s[i]=s[len-1-i];
s[len-1-i]=temp;
}
}
int main(){
char str_a[110];
char str_b[110];
char change[14]={'0','1','2','3','4','5','6','7','8','9','J','Q','K'};
scanf("%s %s",str_a,str_b);
int len_a=strlen(str_a),len_b=strlen(str_b),r=1,len;
reverse(str_a); reverse(str_b);
if(len_b<len_a){
len=len_a;
for(int i=len_b;i<len_a;i++){
str_b[i]='0';
}
}
else{
len=len_b;
for(int i=len_a;i<len_b;i++){
str_a[i]='0';
}
}
//puts(str_a);
//puts(str_b);
for(int i=0;i<len;i++){
if(r%2==1){
str_b[i]=change[(str_b[i]-'0'+str_a[i]-'0')%13];
r++;
}
else{
int temp=str_b[i]-str_a[i];
if(temp<0) temp+=10;
str_b[i]=change[temp];
r++;
}
}
reverse(str_b);
// int j=0;
// while(str_b[j]=='0') j++;
// for(;j<len;j++){
// printf("%c",str_b[j]);
// }
puts(str_b);
}
notes
- 这道题真的写了超级久,我感觉我这两个答案以及参考答案没什么区别啊,但是到现在也没ac。qwq先跳过吧。
A1001 A+B Format
#include<stdio.h>
#include<string.h>
int main(){
int a,b,i=0;
char str[20];
scanf("%d%d",&a,&b);
int c=a+b;
if(c<0){
putchar('-');
c=-c;
}
if(c==0) printf("0");
else{
while(c!=0){
str[i++]=c%10+'0';
c=c/10;
}
int len=strlen(str);
for(int j=len-1;j>=0;j--){
printf("%c",str[j]);
if(j%3==0&&j!=0){
printf(",");
}
}
}
}
notes
- 这道题day0做的时候不忍直视,完全没想到用char[],今天才用比较正常的做法在做。
- 一开始忘了特判结果为0的情况。但是如果用do while语句则无需特判0。
- 另外一种更简洁的做法:利用printf的规格化输出。
if(sum>=1000000) printf("%d,%03d,%03d",sum/1000000,sum%1000000/1000,sum%1000);
else if(sum>=1000) printf("%d,%03d",sum/1000,sum%1000);
else printf("%d",sum);
但是我觉得这种做法可扩展性不好。
不过可作为思维扩展。
A1035 Password
notes
- c语言只有6中基本数据类型:short、int、long、float、double、char。没有bool。c++中才有bool。而bool类型变量未赋值时默认为false。
A1077 Kuchiguse
notes
- while(n–){}时n递减为0,后续判断时用到n,导致一直无法ac。