例题

一、输出整数各位数字

求出它是几位数 。

分别打印出每一位数字

按逆序打印出各位数字

int getdigit(int num) //整数有多少位
{
    int count = 0;
    while (num)
    {
        count++;
        num /= 10;
    }
    return count;
}
void ReprintNum(int num) //逆序打印所有数字
{
    while (num)
    {
        printf("%d", num % 10);
        num = num / 10;
    }
}

void printNum(int num) //正序打印所有数字
{
    int i = 0, j = 0;
    char arr[16];
    while (num)
    {
        arr[i++] = num % 10;
        num /= 10;
    }
    for (j = i - 1; j >= 0; j--)
        printf("%d  ", arr[j]);
}

 

2.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数

int getdigit(int num) //整数有多少位
{
    int count = 0;
    while (num)
    {
        count++;
        num /= 10;
    }
    return count;
}
int fun(int num)
{
    int sum = 0;//要返回的数字
    int n = getdigit(num);
    int base = 1;
    for (int i = 1; i < n; i++)
    {
        base *= 10;
    }
    while (num)
    {
        int temp = num % 10; //取个位数
        sum += temp * base; 
        num /= 10;
        base /= 10;
    }
    return sum;
}

int main()
{
    for (int i = 1000; i < 9999; i++)
    {
        if (i == 4 * fun(i))
        {
            printf("%d", i);
            break;
        }
    }

}

3.验证歌德巴赫猜想

验证歌德巴赫猜想。一个充分大的偶数(大于或等于6)可以分解为两个素数之和。试编程序,将 6至50之间全部偶数表示为两个素数之和。

int zhishu(int num)
{
    if (num < 2)        return 0;
    if (num == 2)    return 1;
    //质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
    for (int i = 2; i <= sqrt((double)num); i++) //求质数
    {
        if (num % i == 0)
        {
            return 0;
        }
    }
    return 1;
}
int main()
{
    for (int i = 6; i < 51; i = i + 2)
    {
        for (int j = 2; j < i; j++)
        {
            if (zhishu(j) && zhishu(i - j))
            {
                printf("%d = %d + %d\n", i, j, i - j);
                break;
            }
        }
    }
}

4.转置矩阵:将一个二维数组行列元素互换,即可得到其转置矩阵

int a[2][3] = { 1,2,3,4,5,6 };
    int b[3][2], i, j;

    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 3; j++)
            printf("%5d", a[i][j]); printf("\n");
    }

    for (i = 0; i < 2; i++)
        for (j = 0; j < 3; j++)
            b[j][i] = a[i][j]; //转置

    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 2; j++)
            printf("%5d", b[i][j]); printf("\n");
    }
    

4.求矩阵的马鞍点。马鞍点即矩阵元素所在行的最大值,以及所在列的最小值。

#define M 100
#define N 100
int main()
{
    int i, j, k, m, n, flag1, flag2;
    int a[M][N], max;
    printf("输入行数 m:");    scanf("%d", &n);
    printf("\n输入列数 n:");    scanf("%d", &m);
    printf("输入要测试的矩阵数据:");
    for (i = 0; i < m; i++)                
    for (j = 0; j < n; j++)
            scanf("%d", &a[i][j]);        
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
            printf("%5d ", a[i][j]); printf("\n");
    }

    flag2 = 0;
    for (i = 0; i < m; i++)
    {
        max = a[i][0];
        for (j = 1; j < n; j++)
            if (a[i][j] > max)  max = a[i][j];
        for (j = 0; j < n; j++)
        {
            flag1 = 0;
            if (a[i][j] == max)
            {
                for (k = 0, flag1 = 1; k < m && flag1; k++)
                    if (a[k][j] < max) flag1 = 0;
                if (flag1)
                {
                    printf("第%d行, 第%d列的 %d是鞍点\n", i, j, a[i][j]);
                    flag2 = 1;
                }
            }
        }
    }
    if (!flag2)
        printf("\n矩阵中无鞍点!\n");



}

 

posted @ 2022-05-22 17:17  YangXinYi  阅读(81)  评论(0编辑  收藏  举报
//color="150,150,150"粒子的颜色设置 opacity="1"粒子的透明度 count="100"粒子的个数