期中C语言考后反思

1.验证“哥德巴赫猜想”

#include <stdio.h>
int issu(long long int a);
int main()
{
    long long int N;
    scanf("%lld", &N);
    long long int i,j;
    for(i=2;i<=N/2;i++)
   { j=N-i;//能大大减少复杂度,对应测试点为运行超时。我怎么就没想到呜~for (j = i; j <= N; j++){
            if (issu(j)&&issu(i) && (i + j == N))
            {
                printf("%lld = %lld + %lld", N, i, j);
                return 0;
            }//}
}
int issu(long long int a)
{
    long long int i;
    if (a == 2)
        return 1;
    for (i = 2; i * i <= a; i++)
    {
        if (a % i == 0)
            return 0;
    }
    return 1;
}

2.求一批整数中出现最多的个位数字

#include <stdio.h>
#define MAX 1000
int main()
{
    int count[10];
    for (int i = 0; i <= 9; i++)
    {
        count[i] = 0;
    }
    int num[MAX];
    int N;
    scanf("%d\n", &N);
    for (int i = 0; i < N; i++)
    {
        scanf("%d", &num[i]);

if(num[i]==0)

{count[0]++;}//测试点:0出现最多次。一直没有考虑到0这个数字,可恶哇!
        while (num[i]!= 0)
        {
            count[num[i] % 10]++;
            num[i] = num[i] / 10;
        }
    }
    int max = 0;
    int i;
    for ( i = 0; i <= 9; i++)
    {
        if (count[i] > count[max])
            max = i;
    }
    printf("%d:", count[max]);
    for (int j = 0; j <= 9; j++)
    {
        if (count[j] == count[max])
            printf(" %d", j);
    }
    printf("\n");
    return 0;
}

3.美好日子//没捋清楚,时间仓促,写的较为复杂

#include <stdio.h>
void wanmeiday(int y);
int main()
{
    int T;
    int num[8000];
    scanf("%d", &T);
    for (int i = 0; i < T; i++)
    {
        scanf("%d", &num[i]);
        wanmeiday(num[i]);
    }
    return 0;
}
void wanmeiday(int y)
{
    int n = y;
    int a, b, c, d;
    d = y % 10;
    y = y / 10;
    c = y % 10;
    y = y / 10;
    b = y % 10;
    y = y / 10;
    a = y % 10;
    int mon, day;
    mon = d * 10 + c;
    day = b * 10 + a;
    if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12)
        {
            if (day <= 31)printf("%d%d%d%d%d\n", n, d, c, b, a);
            else printf("none\n");
        }
    else if (mon == 2)
    {
        if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0)//有点生疏,但还好写对了
        {
            if (day <= 29)printf("%d%d%d%d%d\n", n, d, c, b, a);
            else printf("none\n");
        }
        else
        {
            if (day <= 28)printf("%d%d%d%d%d\n", n, d, c, b, a);
            printf("none\n");
        }
    }
    else if (mon >= 1 && mon <= 12) {
            if (day <= 30)printf("%d%d%d%d%d\n", n, d, c, b, a);
            else printf("none\n");
        }
        else printf("none\n");
    }

4.质价比//时间仓促,结构体知识点薄弱,结构体整体替换有困难

#include <stdio.h>
struct good
{
    int m;//zhiliang
    int p;//jiage
};
int main()
{
    int n;
    struct good goods[100];
    struct good temp;
    while (scanf("%d", &n) != EOF)
    {
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &goods[i].m);
        }
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &goods[i].p);
        }

//比大小
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n - 1 - i; j++)
            {
                if ((goods[j]).m > (goods[j + 1]).m)
                {
                    temp = goods[j];
                    goods[j] = goods[j + 1];
                    goods[j + 1] = temp;
                }
                else if ((goods[j]).m == (goods[j + 1]).m)
                {
                    if (goods[j].p < goods[j + 1].p)
                    {
                        temp = goods[j + 1];
                        goods[j + 1] = goods[j];
                        goods[j] = temp;
                    }
                }
            }
        }
        printf("result:\n");
        for (int i = 0; i < n; i++)
        {
            printf("%d %d\n", goods[i].m, goods[i].p);
        }
    }
    return 0;
}

//结构体知识点: 

(一)定义一个结构体变量

1.先定义结构体类型,再定义变量

第6行定义了一个结构体变量,变量名为stu。struct和Student是连着使用的。

2.定义结构体类型的同时定义变量

结构体变量名为stu

(二)初始化结构体

只能在定义变量的同时进行初始化赋
(三)调用结构体数据

用 . ;->是链表

总结

知识点方面:结构体的定义,表示。

算法方面:考虑不全面,再多想想,更加灵活。

速度方面:还是很慢,但写的很急。先思考再做?有点困难,总害怕写不完。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值