【算法笔记5.1小节 - 数学问题】简单数学课后题

这篇博客涵盖了多个数学和算法问题,包括守形数、反序数、百鸡问题、加法等式等多个数学概念。每个问题都有详细的题目描述、输入输出格式以及样例,适合算法初学者进行练习和理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                            问题 A: 守形数

题目描述

守形数是这样一种整数,它的平方的低位部分等于它本身。
比如25的平方是625,低位部分是25,因此25是一个守形数。
编一个程序,判断N是否为守形数。

输入

输入包括1个整数N,2<=N<100。

输出

可能有多组测试数据,对于每组数据,
输出"Yes!”表示N是守形数。
输出"No!”表示N不是守形数。

样例输入

6
11

样例输出

Yes!
No!
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<iostream>
#include<algorithm>
 
void check(int n)
{
    int nn = n*n,i=0,j=0;
    char n1[10];
    char n2[10];
    while(n)
    {
        n1[i++] = n%10+'0';
        n/=10;
    }
    while(nn)
    {
        n2[j++] = nn%10+'0';
        nn/=10;
    }
    int k=0;
    for(k=0; k<i; k++)
    {
        if(n1[k]!=n2[k])
        {
            printf("No!\n");
            break;
        }
    }
    if(k==i)
        printf("Yes!\n");
}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        check(n);
    }
 
 
 
}
 
/**************************************************************
    Problem: 1939
    User: 151210132
    Language: C++
    Result: 正确
    Time:0 ms
    Memory:2020 kb
****************************************************************/

                                                       问题 B: 反序数

 

题目描述

设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
求N的值

输入

程序无任何输入数据。

输出

输出题目要求的四位数,如果结果有多组,则每组结果之间以回车隔开。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<iostream>
#include<algorithm>
 
int change(int n)
{
    int sum=0;
    while(n)
    {
        sum = sum*10 + n%10;
        n/=10;
    }
    return sum;
}
int main()
{
    int a[1010],k=0;
    for(int i=1000; i<=9999; i++)
    {
        if(i==change(i*9))
            a[k++] = i;
    }
    for(int i=0; i<k; i++)
    {
        printf("%d",a[i]);
        if(i<k-1)
            printf(" ");
        else
            printf("\n");
    }
 
 
}
 
/**************************************************************
    Problem: 1940
    User: 151210132
    Language: C++
    Result: 正确
    Time:0 ms
    Memory:2020 kb
****************************************************************/

 

                                                      问题 C: 百鸡问题

题目描述

用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。

输入

测试数据有多组,输入n。

输出

对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出。

样例输入

45

样例输出

x=0,y=0,z=100
x=0,y=1,z=99
x=0,y=2,z=98
x=0,y=3,z=97
x=0,y=4,z=96
x=1,y=0,z=99
x=1,y=1,z=98
x=1,y=2,z=97
x=2,y=0,z=98
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<iostream>
#include<algorithm>
 
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(int x=0; x<=n/5; x++)
        {
            for(int y=0; y<=n/3; y++)
            {
                for(int z=0; z<=3*n; z++)
                {
                    if(x+y+z==100&&(5*double(x)+3*double(y)+1/3.0*double(z)<=double(n)))
                    {
             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值