有关考试遇到的王美人的那个题,目前能想到的最简练的解法就是下面这种了。
得到的启发就是,一定要理清整个程序运行的逻辑,找到怎么运行是最简便最有条理的,其实在敲代码的中途也可以更好地优化自己的程序,比如敲到一半发现把date=(date+2*i)%31放在最前面能省去一个if语句,而 i 可以省去一个变量等等。
#include <string.h>
#include <stdio.h>
int main(void){
int i,date;
scanf("%d",&date);
for(i=0;i<500;i++){
date=(date+2*i)%31;
if(date==0)
date=31;
printf("%3d",date);
}
return 0;
}
第二题是关于将十进制转化为十六进制的题目,自己傻傻地用了十六个case,刚刚去逛了逛博客才发现用数组真的很好用,凭着印象又写了一次(中间有借鉴其他用户的代码)
但是精髓还是自己敲呀,自己理清思路才能真的进步!
总结:
1、像这种类似于查表一样的题用数组来做真的很方便,以后可以考虑把用switch语句做的题改成这种解法,就把他想象成一个不会动的表还挺容易理解的。
2、如何给字符串数组赋初值还是很难啊,下午做题的时候对a数组竟然没赋初值,太鲁莽了。
#include <string.h>
#include <stdio.h>
int main(void){
int n,c,i=0;
char a[8],b[17]={"0123456789ABCDEF"};
scanf("%d",&n);
for(i=0;i<8;i++){
c=n%16;
n=n/16;
a[i]=b[c];
}
printf("0X");
for(i=7;i>=0;i--)
printf("%c",a[i]);
return 0;
}