蓝桥复习1
项目一:汉诺塔
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void hano(int n,char A,char B,char C); 5 6 int main() { 7 hano(4,'A','B','C'); 8 getchar(); 9 return 0; 10 } 11 /* 12 n 表示要移动盘子的个数 13 后面的 ABC 第一个是盘子的位置 最后一个是盘子 要移动的位置 14 */ 15 void hano(int n,char A,char B,char C) 16 { 17 if(n>=1) 18 { 19 hano(n-1,A,C,B);//把上面的n-1个盘子从A移动到B 20 printf("第%d个%c--->%c\n",n,A,C);//直接操作 21 hano(n-1,B,A,C); 22 } 23 }
项目二:奖卷数目
有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void hano(int n,char A,char B,char C); 5 6 int main() { 7 int m=0,n=0,i,temp; 8 for(i=10000;i<99999;i++) 9 { 10 temp=i; 11 while(temp>0) 12 { 13 m=temp%10; 14 if(m==4) 15 { 16 n++; 17 break; 18 } 19 temp/=10; 20 } 21 } 22 printf("%d",99999-10000-n+1); 23 getchar(); 24 return 0; 25 }
结果:52488
项目三:星际炸弹
在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。
请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
请严格按照格式书写。不能出现其它文字或符号。
请严格按照格式书写。不能出现其它文字或符号。
1 #include <stdio.h> 2 int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 3 bool isleap(int year) 4 { 5 if((year%4==0&&year%100!=0)||year%400==0) 6 return true; 7 return false; 8 } 9 10 int main() { 11 int year=2014; 12 int sum=1000-52;//2014年还剩52天到期 直接用2015年1月1日来算 13 int sum1,month,day; 14 while(true) 15 { 16 if(isleap(year+1)) 17 sum1=366; 18 else 19 sum1=365; 20 if(sum<sum1) 21 { 22 year++; 23 break; 24 } 25 else 26 { 27 year++; 28 sum-=sum1; 29 } 30 } 31 if(isleap(year)) 32 { 33 mon[2]++; 34 } 35 for(int i=1;i<=12;i++) 36 { 37 if(sum>mon[i]) 38 { 39 sum-=mon[i]; 40 } 41 else 42 { 43 month=i; 44 break; 45 } 46 } 47 day=sum; 48 printf("%d %d %d",year,month,day); 49 return 0; 50 }
项目四:三羊献瑞
观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
(如果有对齐问题,可以参看【图1.jpg】)
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
1 #include <stdio.h> 2 int main() 3 { 4 int a1,a2,a3,a4,a5,a6,a7; 5 long temp1,temp2,result; 6 for(a1=1;a1<10;a1++) 7 { 8 for(a2=0;a2<10;a2++) 9 { 10 for(a3=0;a3<10;a3++) 11 { 12 for(a4=0;a4<10;a4++) 13 { 14 for(a5=0;a5<10;a5++) 15 { 16 for(a6=0;a6<10;a6++) 17 { 18 for(a7=0;a7<10;a7++) 19 { 20 temp1=a1*1000+a2*100+a3*10+a4; 21 temp2=1000+a5*100+a6*10+a2; 22 result= 10000+a5*1000+a3*100+a2*10+a7; 23 if(a1==a2||a1==a3||a1==a4||a1==a5||a1==a6||a1==a7||a2==a3||a2==a4||a2==a5||a2==a6||a2==a7||a3==a4||a3==a5||a3==a6||a3==a7||a4==a5||a4==a6||a4==a7||a5==a6||a5==a7||a6==a7||a7==1) 24 continue; 25 if(temp1+temp2==result) 26 { 27 printf("%ld+%ld=%ld\n",temp1,temp2,result); 28 } 29 } 30 } 31 } 32 } 33 } 34 } 35 } 36 37 getchar(); 38 return 0; 39 }
项目五:格子中输出
StringInGrid函数会在一个指定大小的格子中打印指定的字符串。
要求字符串在水平、垂直两个方向上都居中。
如果字符串太长,就截断。
如果不能恰好居中,可以稍稍偏左或者偏上一点。
要求字符串在水平、垂直两个方向上都居中。
如果字符串太长,就截断。
如果不能恰好居中,可以稍稍偏左或者偏上一点。
下面的程序实现这个逻辑,请填写划线部分缺少的代码。
#include <stdio.h> #include <string.h> void StringInGrid(int width, int height, const char* s) { int i,k; char buf[1000]; strcpy(buf, s); if(strlen(s)>width-2) buf[width-2]=0; printf("+"); for(i=0;i<width-2;i++) printf("-"); printf("+\n"); for(k=1; k<(height-1)/2;k++){ printf("|"); for(i=0;i<width-2;i++) printf(" "); printf("|\n"); } printf("|"); printf("%*s%s%*s",_____________________________________________); //填空 printf("|\n"); for(k=(height-1)/2+1; k<height-1; k++){ printf("|"); for(i=0;i<width-2;i++) printf(" "); printf("|\n"); } printf("+"); for(i=0;i<width-2;i++) printf("-"); printf("+\n"); } int main() { StringInGrid(20,6,"abcd1234"); return 0; }
对于题目中数据,应该输出:
+------------------+
| |
| abcd1234 |
| |
| |
+------------------+
1 #include <stdio.h> 2 #include <string.h> 3 4 void StringInGrid(int width, int height, const char* s) 5 { 6 int i,k; 7 char buf[1000]; 8 strcpy(buf, s); 9 if(strlen(s)>width-2) buf[width-2]=0; 10 11 printf("+"); 12 for(i=0;i<width-2;i++) printf("-"); 13 printf("+\n"); 14 15 for(k=1; k<(height-1)/2;k++){ 16 printf("|"); 17 for(i=0;i<width-2;i++) printf(" "); 18 printf("|\n"); 19 } 20 21 printf("|"); 22 23 printf("%*s%s%*s",(width-strlen(buf)-2)/2,"",buf, (width-1-strlen(s))/2, ""); //填空 24 25 printf("|\n"); 26 27 for(k=(height-1)/2+1; k<height-1; k++){ 28 printf("|"); 29 for(i=0;i<width-2;i++) printf(" "); 30 printf("|\n"); 31 } 32 33 printf("+"); 34 for(i=0;i<width-2;i++) printf("-"); 35 printf("+\n"); 36 } 37 38 int main() 39 { 40 StringInGrid(20,6,"abcd1234"); 41 return 0; 42 }