C语言 百炼成钢5

//题目13:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
//本身。例如:153是一个“水仙花数”,因为153 = 1的三次方+5的三次方+3的三次方。


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>


//分析:先准备一个动态内存数组,用来存储所有的三位数,这个三位数百位不可以是0
//为了便于分解,先定义结构体
//然后获取百位,num/100,获取十位,(num-百位*100)/10,个位是(num-百位*100-十位*10)
//分解出个位,十位,百位,看是否满足水仙花数
//pow()函数的使用

struct NarcissuNum{
    int Hundred;
    int Ten;
    int Indiv;
};

void main(){
    //定义动态数组
    struct NarcissuNum *p = malloc(sizeof(struct NarcissuNum) * 2000);
    struct NarcissuNum num,*pn;
    pn = &num;
    //3重循环构建所有三位数
    int m = 0;
    for (int i = 1; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            for (int k = 0; k < 10; k++)
            {
                if ((int)(pow(i, 3.0) + (int)pow(j, 3.0) + (int)pow(k, 3.0)) == (i * 100 + j * 10 + k))
                {
                    pn->Hundred = i;
                    pn->Ten = j;
                    pn->Indiv = k;
                    *(p + m) = *pn;
                    m++;
                }
            }
        }
    }
    for (int i = 0; i < m; i++)
    {
        printf("
%d%d%d", (p + i)->Hundred, (p + i)->Ten, (p + i)->Indiv);
    }

    system("pause");
}
View Code

//题目14:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//分析:首先求出这个整数的因数,再对因数求因数,直到无法求值为止,递归调用----这个思路错误
//正整数分解质因数,如果从小到大去分解,就不会存在(能再被分解的因数)



void main(){
    int num = 0;
    int index = 0;
    scanf("%d", &num);
    printf("
");
    //index = (int)sqrt((double)(num+1));
    for (int i = 2; i <= num; i++)
    {
        while (1){
            if (num%i == 0)
            {
                if (num/i==1)
                {
                    printf("%d", i);
                }
                else{
                    printf("%d*", i);
                }
                num = num / i;
            }
            else{
                break;
            }
        }
        
    }
    system("pause");
}

//题目15:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,
//60分以下的用C表示。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//分析;可以使用if嵌套或者switch语句来完成

void protect1(int num){
    if (num >= 90)
    {
        printf("A");
    }
    else if (num >= 60){
        printf("B");
    }
    else{
        printf("C");
    }
}

void protect2(int num){
    int temp = num /10;
    switch (temp)
    {
    case 9:
        printf("A");
        break;
    case 8:
    case 7:
    case 6:
        printf("B");
        break;
    default:
        printf("C");
        break;
    }
}

void main(){
    int num = 0;
    scanf("%d",&num);
    printf("
");
    protect2(num);
    system("pause");
}

原文地址:https://www.cnblogs.com/zhanggaofeng/p/5148745.html