蓝桥复习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,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
",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("+
");
	
	for(k=1; k<(height-1)/2;k++){
		printf("|");
		for(i=0;i<width-2;i++) printf(" ");
		printf("|
");
	}
	
	printf("|");
	
	printf("%*s%s%*s",_____________________________________________);  //填空
	          
	printf("|
");
	
	for(k=(height-1)/2+1; k<height-1; k++){
		printf("|");
		for(i=0;i<width-2;i++) printf(" ");
		printf("|
");
	}	
	
	printf("+");
	for(i=0;i<width-2;i++) printf("-");
	printf("+
");	
}

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("+
");
14     
15     for(k=1; k<(height-1)/2;k++){
16         printf("|");
17         for(i=0;i<width-2;i++) printf(" ");
18         printf("|
");
19     }
20     
21     printf("|");
22     
23     printf("%*s%s%*s",(width-strlen(buf)-2)/2,"",buf, (width-1-strlen(s))/2, "");  //填空
24               
25     printf("|
");
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("|
");
31     }    
32     
33     printf("+");
34     for(i=0;i<width-2;i++) printf("-");
35     printf("+
");    
36 }
37 
38 int main()
39 {
40     StringInGrid(20,6,"abcd1234");
41     return 0;
42 }
 
原文地址:https://www.cnblogs.com/liugangjiayou/p/10583979.html