1. 我们一般在计算a+b的时候,一般直接使用+号进行运算,那么有没有另外一种方法,能够直接不使用+号就能进行加法运算呢?
int add(int a,int b) { while(b!=0) { int _a=a^b; int _b=(a&b)<<1; _a=a; _b=b; } return a; }
2.这里我们还要研究一下怎样判断输入的字符串是数字还是字母。
int is_alphanumeric(char c) { { if((c>='A'&&c<='Z')||(c>='a'&&c<='z')||(c>='0'&&c<='9')) return true; else return false; }
3.switch基本语句基本介绍
swtich(表达式) { // ()中的数据类型仅仅支持整数 case 常量1 : 要执行的语句; break; case 常量2 : 要执行的语句; break; case 常量3 : 要执行的语句; break; default: 要执行的语句; break; }
4.判断闰年方法:
(1)该数可以被4整除,但不能被100整除;(例如2008,2012)
(2)可以被400整除;//方法一:调用子函数 #includeint main(void) { int leap,year; printf("Please enter the year:"); scanf("%d",&year); leap=judge_year(year); if(leap==1) //leap==1,而不是leap=1;如果leap=1,则前面 // 的leap全部赋值为1,输出的全为闰年 printf("%d leap is",year); else printf("%d leap not is",year); printf(" a leap year.n"); return 0; } int judge_year(int day) { int i; if((day%4==0 && day%100!=0) || (day%400==0)) i=1; else i=0; return (i); } // if的嵌套结构 #include int main(void) { int leap,year; printf("Please enter the year:"); scanf("%d",&year); //以下是不同方法的if嵌套,上下的代码可以直接衔接; // 方法一if嵌套 if(year%4==0) { if(year%100==0) { if(year%400==0) leap=1; else leap=0; } else leap=1; } else leap=0; //方法二:或引用操作 if((year%4==0 && year%100!=0 )|| (year%400==0)) leap=1; else leap=0; // 方法三: if(year%4!=0) leap=0; else if(year%100!=0) leap=1; else if(year%400!=0) leap=0; else leap=1; //方法三 错误修改和说明,方法二错误的修改,2100判断错误! if(year%4==0) //错误:如果满足条件就不执行%100了。 // 例如2100,可以%4,所以直接就输出闰年了 leap=1; else if(year%100==0) leap=0; else if(year%400==0) leap=1; else leap=0; if(leap==1) //对判断结果的输出 printf("%d leap is",year); else printf("%d leap not is",year); printf(" a leap year.n"); return 0; }
5.将字母的小写转化为大写
知识点:字母的小写比大写大了32
#includeint main() { int one='a'; printf("%c",one-32);//在这里可以输出小写字母的大写字母A return 0; }
6.打印X字母
#includeint main() { int n; scanf("%d",&n); for(int i=0;i
7.巴士博弈相关详解:
巴什博弈一般题目为:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。
理解:显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下 (m+1)的倍数,就能最后获胜。
#includeint main(){ int n,m;//n是石头的个数,m是每次最多取石头的个数 while(~scanf("%d%d",&n,&m)){ if(n%(m+1) == 0) printf("后者胜n"); else printf("前者胜n"); } return 0; }
8.对于巴什博弈,还有个玩法,如果我们规定,如果最后取光者输,那么又会如何呢?
可以这样想:获胜者一定取了第n-1个石头,那么就可以这样想:谁先取了第n-1个石头谁就是胜利者,代码仅有一点改动:#includeint main(){ int n,m;//n是石头的个数,m是每次最多取石头的个数 while(~scanf("%d%d",&n,&m)){ if((n-1)%(m+1) == 0) printf("后者胜n"); else printf("前者胜n"); } return 0; }



