C语言基础算法合集

1、邮票组合

        某人有四张3分的邮票和三张5分的邮票,用这些邮票中的一张或若干张可以得到多少种不同的邮资?

算法思路:    

        将问题进行数学分析,不同张数和面值的邮票组成的邮资可用下列公式计算:

        S = 3 * i + 4 *j

其中i为3分邮票的张数,j为5分邮票的张数。

        按题目要求,3分的邮票可以取0、1、2、3、4张,5分的邮票可以取0、1、2、3张。采用穷举法进行组合,可以求出这些不同面值不同张数的邮票组合后的邮资。

int a[27];

int main(){
    int i,j,k,s,n=0;
    for(i=0;i<=4;i++){
        for(j=0;j<=3;j++){
            s=i*3 + j*5;
            for(k=0;a[k];k++){
                if(s == a[k])break;
            }
            if(!a[k] && s){a[k]=s;n++;}
        }
    }
    printf("%d kinds:",n);
    for(k=0;a[k];k++)
        printf("%2d",a[k]);
}

2、日期转换(数组)

        给定某年某月某日,将其转换成这一年的第几天并输出。

算法思路:

        算法很简单,若给定的月是i,则将1、2、3、......、i-1月的各月天数累加,再加上指定的日。但对于闰年,二月的天数29天,因此还要判定给定的年是否为闰年,为实现这一算法,需设置一张月天数列表,给出每个月的天数,考虑到闰年和平年的情况下,此表可设置成一个2行13列的二维数组,其中第一行对应的每行(设1~12列有效)元素是平年各月的天数,第二行对应的是闰年每月的天数。

#include<stdio.h>

int day_of_year(day_tab,year,month,day){
    int day_tab[][13];
    int year,month,day;
    int i,j;
    //判定这闰年还是平年,i=0为平年,i=1为闰年
    i = (year%4 == 0 && year%100 != 0) || year%400 == 0;
    for(j=1;j<=month;j++){
        day += day_tab[i][j];
    }
    return day;
}

int main(){
    static int day_tab[2][13]={
        {0,31,28,31,30,31,30,31,31,30,31,30,31},
        {0,31,29,31,30,31,30,31,31,30,31,30,31}
    };
    int y,m,d;
    scanf("%d%d%d",&y,&m,&d);
    printf("%d\n",day_of_year(day_tab,y,m,d));
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_39312146/article/details/131712249