求这仨题的代码红红火火呼呼

我就是个的v数据大合集宿舍大家宿舍喝酒都会大喊大叫内务部队恢复的合并文件

img

img

img

这些题简单点就是暴力遍历,也可以稍微进行一定算法优化处理
题3

#include <stdio.h>
 
//计算数中6的个数
int fun(int n)
{
    int cnt = 0;
    while (n)
    {
        if (n % 10 == 6)
            cnt++;
        n /= 10;
    }
    return cnt;
}
 
 
int main()
{
    int i,count=0;
    FILE* fp = 0;
    fp = fopen("myf2.out", "w");
    for (i=1000;i<=9999;i++)
    {
        if (i % 3 == 0 && fun(i) >= 2)
            count++;
            fprintf(fp, "%d\n",i);//将a,b,c写入文件
    }
    fclose(fp);
    printf("总共有%d个符合要求的数。\n", count );
    return 0;
}

其实这题从算法上可能可以优化的,比如因为至少包含2个6,又要是3的倍数,所以其它2位的和必须是3的倍数,这有这样一些数字组合(不再管位置)0,3 0,6 0,9 1,2 1,5 1,8 2,4 2,7 3,6 3,9 4,5 4,8 5,7 6,6 6,9 7,8 ,所以这个问题可以转换为6,6 与这些进行全排列成有效4位数(去除重复)的情况,不过这个涉及排列、重复过滤,在现在问题规模来说,编码复杂度提高很多,但效率又体现不出来,所以就不必优化,直接暴力过滤处理啦。

题4稍微可以进行一下优化,因为有公约数3的倍数条件和a<b的条件,所以a的起点就可以从3开始啦,终止条件也是99/2=49 啦,这样搜索速度就快多了。

#include <stdio.h>
 
int gcd(int a, int b)
{
    int c = a > b ? b : a;
    for (; c >= 1; c--)
    {
        if (a % c == 0 && b % c == 0)
            break;
    }
    return c;
}
 
int main()
{
    int a,b;
    int c;
    FILE* fp = 0;
    fp = fopen("myf2.out", "w");
    for (a = 3; a < 49; a=a+3)
    {
        b = 99 - a;
        c = gcd(a, b);
        fprintf(fp, "%d,%d,%d\n", a, b, c);//将a,b,c写入文件
    }
    fclose(fp);
    return 0;
}

题5比较简单,也没有太多优化方向:

#include <stdio.h>
 
int fun(int n)
{
    int a = n % 100; //得到后2位对应整数
    int b = n / 100; //得到前2位对应整数
    if (n == a * a + b * b)
        return 1;
    else
        return 0;
}
 
int main()
{
    int i;
    FILE* fp = 0;
    fp = fopen("myf2.out", "w");
    for (i=1000;i<=9999;i++)
    {
        if (fun(i))
            fprintf(fp, "%d\n",i);//将a,b,c写入文件
    }
    fclose(fp);
    return 0;
}

3:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//计算数中6的个数
int fun(int n)
{
    int cnt = 0;
    while (n)
    {
        if (n % 10 == 6)
            cnt++;
        n /= 10;
    }
    return cnt;
}


int main()
{
    int i;
    FILE* fp = 0;
    fp = fopen("myf2.out", "w");
    for (i=1000;i<=9999;i++)
    {
        if (i % 3 == 0 && fun(i) >= 2)
            fprintf(fp, "%d\n",i);//将a,b,c写入文件
    }
    fclose(fp);
    return 0;
}

4:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int gcd(int a, int b)
{
    int c = a > b ? b : a;
    for (; c >= 1; c--)
    {
        if (a % c == 0 && b % c == 0)
            break;
    }
    return c;
}

int main()
{
    int a,b;
    int c;
    FILE* fp = 0;
    fp = fopen("myf2.out", "w");
    for (a = 1; a < 99; a++)
    {
        b = 99 - a;
        c = gcd(a, b);
        if (a < b && c % 3 == 0)
            fprintf(fp, "%d,%d,%d\n", a, b, c);//将a,b,c写入文件
    }
    fclose(fp);
    return 0;
}

5:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int fun(int n)
{
    int a = n % 100; //后2位
    int b = n / 100; //前2位
    if (n == a * a + b * b)
        return 1;
    else
        return 0;
}

int main()
{
    int i;
    FILE* fp = 0;
    fp = fopen("myf2.out", "w");
    for (i=1000;i<=9999;i++)
    {
        if (fun(i))
            fprintf(fp, "%d\n",i);//将a,b,c写入文件
    }
    fclose(fp);
    return 0;
}