《程序设计》编程题|041-050

习题4-5 换硬币 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    // 输入
    int x;
    scanf("%d",&x);
    // 处理:计算换取的硬币数
    int cnt[3];
    int num=0;
    for(cnt[0]=x/5;cnt[0]>=1;--cnt[0]){
        for(cnt[1]=x/2;cnt[1]>=1;--cnt[1]){
            for(cnt[2]=1;cnt[2]<=x;++cnt[2]){
                int sum=5*cnt[0]+2*cnt[1]+cnt[2];
                if(sum==x){
                    int total=cnt[0]+cnt[1]+cnt[2];
                    printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",cnt[0],cnt[1],cnt[2],total);
                    ++num;
                }
            }
        }
    }
    // 输出
    printf("count = %d\n",num);
    
    return 0;
}

习题4-6 水仙花数 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <math.h>
#include <stdbool.h>

// 返回:自幂数->true 否则->false
bool isNarcissistic(int number){
    // 求正整数的位数
    int cnt=0;
    int tmp=number;
    while(tmp>0){
        ++cnt;
        tmp/=10;
    }
    // 求幂和
    int sumPow=0;
    tmp=number;        
    while(tmp>0){
        sumPow+=pow(tmp%10,cnt);
        tmp/=10;
    }
    return sumPow==number;
}

int main(){
    // 输入
    int n;
    scanf("%d",&n);
    // 输出:递增顺序输出所有n位水仙花数
    int lower=pow(10,n-1);
    int upper=pow(10,n)-1;
    for(int i=lower;i<=upper;++i){
        if(isNarcissistic(i)){
            printf("%d\n",i);
        }
    }
    
    return 0;
}

编程题 – 题目列表 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

// 返回:最大公约数
int gcd(int m,int n){
    return n==0?m:gcd(n,m%n);
}

// 返回:最小公倍数
int lcm(int m,int n){
    return m*n/gcd(m,n);
}

int main(){
    // 输入
    int m,n;
    scanf("%d %d",&m,&n);
    // 处理:求最大公约数和最小公倍数
    int g=gcd(m,n);
    int l=lcm(m,n);
    // 输出
    printf("%d %d\n",g,l);
    
    return 0;
}

习题4-8 高空坠球 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <math.h>

int main(){
    // 输入
    double height,n;
    scanf("%lf %lf",&height,&n);
    // 处理:
    // 计算第n次落地总距离
    double sum=0;
    if(n==1){
        sum=height;
    }else if(n>=2){
        sum=height*(3.0-1.0/pow(2,n-2));
    }
    // 计算第n次反弹的高度
    double heightN=0;
    if(n!=0){
        heightN=height/pow(2,n);
    }

    printf("%.1f %.1f\n",sum,heightN);
    
    return 0;
}

习题4-9 打印菱形图案 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    // 输入 
    int n;
    scanf("%d",&n);
    // 边界处理
    if(n==1){
        printf("* \n");
        return 0;
    }
    // 输出:正三角+分界线+倒三角
    int layer=n/2;
    // 正三角
    for(int i=1;i<=layer;++i){
        // 空格
        int blk=n+1-2*i;
        for(int j=1;j<=blk;++j){
            printf(" ");
        }
        // 字符
        int ch=2*i-1;
        for(int j=1;j<=ch;++j){
            printf("* ");
        }
        // 换行
        printf("\n");
    }
    // 分界线
    for(int j=1;j<=n;++j){
        printf("* ");  
    }
    printf("\n");
    // 倒三角
    for(int i=1;i<=layer;++i){
        // 空格
        int blk=2*i;
        for(int j=1;j<=blk;++j){
            printf(" ");
        }
        // 字符
        int ch=n-2*i;
        for(int j=1;j<=ch;++j){
            printf("* ");
        }
        // 换行
        if(i<layer){
            printf("\n");
        }
    }
    
    return 0;
}

习题4-10 猴子吃桃问题 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    // 输入
    int n;
    scanf("%d",&n);
    // 处理:求第一天摘的桃子
    int result=1;
    for(int i=1;i<n;++i){
        result=2*(1+result);
    }
    // 输出
    printf("%d",result);
    
    return 0;
}

习题4-11 兔子繁衍问题 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>

int main(){
    // 输入
    int n;
    scanf("%d",&n);
    // 边界处理
    if(n==1){
        printf("1\n");
        return 0;
    }
    // 处理:求最少需要的月数
    int month=2;
    int nums[3]={0,1,1};
    // 滚动更新
    while(nums[2]<n){
        ++month;
        nums[0]=nums[1];
        nums[1]=nums[2];
        nums[2]=nums[0]+nums[1];
    }
    // 输出
    printf("%d",month);
    
    return 0;
}

练习6-3 英文字母替换加密(大小写转换+后移1位) – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <ctype.h>

int main(){
    // 输入
    char cur;
    cur=getchar();
    // 输出
    while(cur!='\n'){
        char ch;
        if(islower(cur)){
            if(cur=='z') ch='A';
            else ch=toupper(cur+1);
        }else if(isupper(cur)){
            if(cur=='Z') ch='a';
            else ch=tolower(cur+1);
        }else{
            ch=cur;
        }
        putchar(ch);
        cur=getchar();
    }
    
    return 0;
}

习题6-7 简单计算器 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <stdbool.h>

int main() {
    int result, num;
    char op;
    bool isError = false;
    // 无法读取第一个整数
    if (scanf("%d", &result) != 1) {
        printf("ERROR");
        return 0;
    }
    // 读取运算符,直到读取到=
    while (scanf("%c", &op) == 1 && op != '=') {
        // 读取到非法运算符
        if (op != '+' && op != '-' && op != '*' && op != '/') {
            isError = true;
            break;
        }
        // 读取下一个操作数
        if (scanf("%d", &num) != 1) {
            isError = true;
            break;
        }
        switch (op) {
            case '+':
                result += num;
                break;
            case '-':
                result -= num;
                break;
            case '*':
                result *= num;
                break;
            case '/':
                // 除0错误
                if (num == 0) {
                    isError = true;
                    break;
                }
                result /= num; 
                break;
        }
        if (isError){
            break;
        }
    }
    if (isError) {
        printf("ERROR");
    } else {
        printf("%d", result);
    }

    return 0;
}

习题6-8 单词首字母大写 – 浙大版《C语言程序设计(第4版)》题目集

#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>

int main(){
    char pre=' ';
    char cur;   
    while((cur=getchar())!=EOF){
        // 句子第一个字母字符
        // 和前一个字符是空格的小写字母字符需要改为大写字母
        if(islower(cur) && pre==' '){
            putchar(toupper(cur));
        }else{
            putchar(cur);
        }
        pre=cur;
    }
    
    return 0;
}

发表评论