c练习题

来源:互联网 发布:linux java ide 编辑:程序博客网 时间:2024/04/29 18:55

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     3int 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;}


原创粉丝点击