2013蓝桥杯的一些题目,看到就拿来做一下了。
/*
calculate the date through the count of day and birthday
eg:birthday:1777/4/30 day:5343 => 1971/12/5
*/
#include<stdio.h>
int Isleapyear(int year)
{
return (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0));
}
int GetMaxDay(int year, int month)
{
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return (Isleapyear(year) ? 29:28);
default:
return -1;
}
}
int GetXDays(int *year, int *month, int day, int X)
{
int i;
for(i = 0; i < X; i++) {
if(day != GetMaxDay((int)*year, (int)*month)) {
++day;
}
else {
day = 1;
if(*month != 12)
++*month;
else {
*month = 1;
++*year;
}
}
}
printf("year= %d, month = %d, day = %d\n", *year, *month, day);
return day;
}
int main(void)
{
int day, X;
int year, month;
year = 1777;
month = 4;
day = 30;
X = 5343;
day = GetXDays(&year, &month, day, X);
printf("year= %d, month = %d, day = %d\n", year, month, day);
return 0;
}
/* resverse
1 2 3 4 5 6 7 8 9
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int reverse(int price)
{
int i, len, tmp, opi;
char buf[8] = {0};
sprintf(buf, "%d", price);
len = (int)strlen(buf);
if(buf[3] == 0)
return -1;
for(i = 0; i < len; i++) {
if(buf[i] == '3' || buf[i] == '4' || buf[i] == '7')
return -1;
else if(buf[i] == '6')
buf[i] = '9';
else if(buf[i] == '9')
buf[i] = '6';
}
for(i = 0; i < len / 2; i++) {
opi = len - 1 - i;
tmp = buf[i];
buf[i] = buf[opi];
buf[opi] = tmp;
}
price = atoi(buf);
return price;
}
int find_price(void)
{
int sub1, sub2, i, j;
for(i = 1000; i < 9999; i++) {
if(reverse(i) == -1)
continue;
sub1 = i - reverse(i);
if(sub1 < 200 || sub1 > 300)
continue;
for(j = 1000; j < 9999; j++) {
if (reverse(j) == -1)
continue;
sub2 = j - reverse(j);
if(sub2 < 800 || sub2 > 900)
continue;
if((sub2 - sub1) == 558) {
printf("i = %d , j = %d, opi = %d, opj = %d\n", i, j,reverse(i), reverse(j));
printf("i - opi = %d, j - opj = %d opj - opi = %d\n", i - reverse(i), j - reverse(j), j - reverse(j) - i + reverse(i));
}
}
}
return 0;
}
int main(void)
{
find_price();
return 0;
}
/*
find the number such as:
203879 * 203879 = 41566646641
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int same(int x)
{
int i, j, tmp;
//char buf[32] = {0};
char buf[32];
sprintf(buf, "%d", x);
//printf("buf = %d", (int)strlen(buf));
for(i = 0; i < 5; i++) {
tmp = buf[i];
for(j = i+1; j < 6; j++) {
if(tmp == buf[j])
return 1;
}
}
return 0;
}
int has_same_bit(int x, long num)
{
int i, j;
char buf1[32], buf2[64];
sprintf(buf1, "%d", x);
sprintf(buf2, "%ld", num);
for(i = 0; i < 6; i++) {
for(j = 0; j < (int)strlen(buf2); j++) {
//printf("buf1[%d] = %c, buf2[%d] = %c\n", i, buf1[i], j, buf2[j]);
if(buf1[i] == buf2[j])
return 1;
}
}
return 0;
}
int main(void)
{
int i;
long num;
for(i = 100000; i < 999999; i++){
num = (long)i*i;
//printf("i = %ld, num = %ld\n", i, num);
if(same(i))
continue;
if(has_same_bit(i, num))
continue;
else
printf("the number is %d\n", i);
}
return 0;
}
strlen:
/* strlen */
#include<stdio.h>
//int mystrlen(const char a[])
int mystrlen(const char *a)
{
if(*a == '\0'){
printf("this is a comment\n");
return 0;
}
else {
printf("call myself\n");
return 1 + mystrlen(a+1);
}
}
int main(void)
{
printf("%d\n", mystrlen("test"));
return 0;
}
/*
jump grid:
*/
#include<stdio.h>
#define START_ROW 0
#define START_COL 0
#define END_COL 4
#define END_ROW 3
int sum = 0;
void visit(int row, int col)
{
if(row == END_ROW && col == END_COL)
++sum;
if(row + 1 < 4)
visit(row+1, col);
if(col + 1 < 5)
visit(row, col+1);
}
int main(void)
{/*
const int array[][] = {
{0, 1, 2, 3, 4},
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}
};
*/
int row, col;
int a[4][5];
/* initial array */
for(row = 0; row < 4; row++)
for(col = 0; col < 5; col++)
a[row][col] = row + col;
visit(START_ROW, START_COL);
printf("sum = %d\n", sum);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main()
{
char ch[7];
int a[100] = {0};
int i = 0, c;
int n = 0;
int max = 0, min = 99;
int missing = 0, repeating = 0;
while(n < 2 && (ch[i] = getchar()) != EOF) {
if (ch[i] <= '9' && ch[i] >= '0')
i++;
else if (ch[i] == ' ') {
i = 0;
c = atoi(ch);
if(max < c)
max = c;
if(min > c)
min = c;
a[c]++;
printf("c = %d, a[%d] = %d\n", c, c, a[c]);
} else if(ch[i] == '\n') {
i = 0;
n++;
c = atoi(ch);
if(max < c)
max = c;
else if(min > c)
min = c;
a[c]++;
printf("n++, c = %d, a[%d] = %d\n", c, c, a[c]);
}
}
for(i = min; i < max; i++) {
if(a[i] == 0) {
missing = i;
}
if(a[i] > 1) {
repeating = i;
}
}
printf("min = %d, max = %d\n", min, max);
printf("missing = %d, repeating = %d\n", missing, repeating);
return 0;
}