首页 团队成员,上杉九月的文章

文章简介

作者:上杉九月

排版与发布:上杉九月

前言

记录一下程序开发实训课程的题解。

我是用的IDE为VsCode,所以在代码中会出现system("pause");

正文

专题一(函数)

素数判断

题目描述

编写一个函数isprime(n).判断整数n是否为素数.编写程序使用此函数,当输入一个整数时,对它进行判断,当为素数时,输出1.否则,输出0.

输入输出格式

输入格式

输入一个整数

输出格式

输出判断结果0或1

输入输出样例

输入样例 #1
45
输出样例 #1
0

题解

代码:上杉九月

思路

本题十分简单。

  • 使用temp变量存储num的因数个数
  • 使用for从2循环到num,若出现num整除i时使temp++
  • 最后使用if判断,temp为0则说明只有1和它本身两个因数,故输出1;temp > 0则说明有其他的因数,故输出0
AC代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int temp;
int pr[10000000];
int isprime(int num)
{
    int temp = 0;
    for(int i = 2; i < num; i++)
    {
        if(num % i == 0)
        {
            temp++;
        }
    }
        if(temp == 0)
        {
            return 1;
        }
        else
        {
            return 0;
        }
}
int main()
{
    int num;
    cin>>num;
    cout<<isprime(num);
    system("pause");
    return 0;
}

直角三角形

题目描述

任意输入三条边的边长(实数类型),判断能否组成三角形,如果不可以组成三角形,程序输出“It is not a triangle”;如果可以组成三角形,进而判断该三角形是否是直角三角形,如果是直角三角形,程序输出“It is a right triangle”,否则输出“It is not a right triangle”。

输入输出格式

输入格式

三条边的边长

输出格式

判断结果

输入输出样例

输入样例 #1

6 8 10

输出样例 #1

It is a right triangle

题解

代码:上杉九月

思路
  • 首先为了方便处理数据,先将三条边长按照从小到大的顺序排列。排序算法随意,这里为了省事直接sort
  • 然后Judge_Triangle对数据预处理,筛选出来是否为三角形。若是,则进入下一个函数Right_Triangle,若不是,直接输出It is not a triangle
  • 判断直角三角形也很简单,勾股定理即可
AC代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int a[3];
void Right_Triangle()
{
    if(a[0] * a[0] + a[1] * a[1] == a[2] * a[2])
    {
        cout<<"It is a right triangle";
    }
    else
    {
        cout<<"It is not a right triangle";
    }
}
void Judge_Triangle()
{
    if(a[0] + a[1] > a[2])
    {
        Right_Triangle();
    }
    else
    {
        cout<<"It is not a triangle";
    }
}
int main()
{
    for(int i = 0; i < 3; i++)
    {
        cin>>a[i];
    }
    sort(a,a+3);
    Judge_Triangle();
    system("pause");
    return 0;
}

直角三角形,求最小余弦值

题目描述

任意输入三条边的边长(整数类型),判断能否组成三角形,如果不可以组成三角形,程序输出“It is not a triangle”;如果可以组成三角形,进而判断该三角形是否是直角三角形,如果不是直角三角形,程序输出“It is not a right triangle”,否则输出最小余弦值的最简分式。比如三边分别是6、8、10时,最小的余弦值是6/10,那么输出的结果应该是3/5。

输入输出格式

输入格式

三条边的边长

输出格式

最小余弦值的最简分式

输入输出样例

输入样例 #1
6 8 10
输出样例 #1
3/5

题解

代码:上杉九月

思路
  • 本题是在上题的基础上增加了分式化简,因为已经对边长进行了排序,故余弦值一定是a[0] / a[2]
  • 化简就是找两者的最大公因式,使用temp存储,然后使用for遍历较小的边
  • 因为temp这里初始为0,所以temp为0说明两者没有公因式,直接输出
AC代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int a[3];
int temp;
void GCD()
{
    for(int i = 2; i <= a[0]; i++)
    {
        if(a[0] % i == 0 && a[2] % i == 0)
        {
            temp = i;
        }
    }
}
void Cos_Triangle()
{
    GCD();
    if(temp == 0)
    {
        cout<<a[0]<<"/"<<a[2];
    }
    else
    {
        cout<<(a[0] / temp)<<"/"<<(a[2] / temp);
    }
}
void Right_Triangle()
{
    if(a[0] * a[0] + a[1] * a[1] == a[2] * a[2])
    {
        Cos_Triangle();
    }
    else
    {
        cout<<"It is not a right triangle";
    }
}
void Judge_Triangle()
{
    if(a[0] + a[1] > a[2])
    {
        Right_Triangle();
    }
    else
    {
        cout<<"It is not a triangle";
    }
}
int main()
{
    for(int i = 0; i < 3; i++)
    {
        cin>>a[i];
    }
    sort(a,a+3);
    Judge_Triangle();
    system("pause");
    return 0;
}

求三角形面积

题目描述

若已知三角形三个边的长度分别为a,b,c(并假设三个边长度的单位一致,在本编程题中忽略其单位),则可以利用公式 $S = \sqrt{s(s - a)(s - b)(s - c)}$,然后利用上述公式计算面积并输出,结果小数点后保留3位有效数字。

输入输出格式

输入格式

从控制台输入三个整数表示三角形三个边的长度,以空格分隔三个整数。

输出格式

向控制台输出求得的三角形的面积,小数点后保留三位有效数字。

输入输出样例

输入样例 #1
4 4 6
输出样例 #1
7.937

题解

代码:上杉九月

思路
  • 有公式$S = \sqrt{s(s - a)(s - b)(s - c)}$,直接根据公式写代码
  • 使用.3f保留三位小数
AC代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
    int a, b, c;
    float s, area;
    cin>>a>>b>>c;
    s = (a + b + c) / 2;
    area = sqrt((s * (s - a) * (s - b) * (s - c)));
    printf("%.3f", area);
    system("pause");
    return 0;
}

整数各位数求和

题目描述

编写一个函数sum(i),将输入的整形参数i的各位求和,返回求和结果。在main()函数中测试此函数,从键盘输入整数n(n在区间[1,20]),然后再输入n个非负整数,对于每一个非负整数调用sum函数求各位数和,将结果输出到屏幕。

输入输出格式

输入格式

从键盘输入一个正整数n,然后有n行输入,分别表示n个非负整数。

输出格式

在屏幕上分别输出n行,第i行依次对应第i个非负整数的各位之和。

输入输出样例

输入样例 #1
4
234567
0
999999
000432
输出样例 #1
27
0
54
9
样例说明
整数234567、0、999999和000432各位之和(个位、十位、百位&hellip;&hellip;相加)分别为:27、0、54和9,故在屏幕上打印输出:
27
0
54
9

题解

代码:上杉九月

思路
  • 使用变量temp存储结果,对于保存在数组里的数据,%10取最后一位,/10舍去最后一位,当num舍到个位数,直接加到temp,输出结果
AC代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
void Sum_Number(int num)
{
    int temp = 0;
    while(num > 10)
    {
        temp += num % 10;
        num /= 10;
    }
    temp += num;
    cout<<temp<<"\n";
}
int main()
{
    int n;
    cin>>n;
    int a[n];
    for(int i = 0; i < n; i++)
    {
        cin>>a[i];
    }
    for(int i = 0; i < n; i++)
    {
        Sum_Number(a[i]);
    }  
    system("pause");
    return 0;
}

玫瑰花数

题目描述

如果一个四位数各位数字的四次方之和恰好等于该数本身,那么这个四位数就是一个玫瑰花数,例如:

$1634 = 1^4 + 6^4 + 3^4 + 4^4 = 1 + 1296 + 81 + 256$

写一个函数,判断某一个四位数是不是玫瑰花数,如果是玫瑰花数返回1,否则返回0。并在主函数中调用该函数,最终输出所有的玫瑰花数。

输入输出格式

输入格式

没有输入

输出格式

所有的四位玫瑰花数。(每行中仅显示一个玫瑰花数)

输入输出样例

题解

代码:上杉九月

思路
  • 该题枚举即可,从1000开始枚举到10000,a数组分别存个十百千四位。
  • num将每一位四次方的结果存起来,和此时枚举的i作比较,若是,则输出。
AC代码
#include <iostream>
#include <cstdio>
#include <cmath>//pow(10, x)
#include <algorithm>
using namespace std;
int main()
{
    int a[4];
    int num;
    for(int i = 1000; i < 10000; i++)
    {
        int temp = i;
        a[0] = temp % 10;
        temp /= 10;
        a[1] = temp % 10;
        temp /= 10;
        a[2] = temp % 10;
        a[3] = temp / 10;
        num = pow(a[0], 4) + pow(a[1], 4) + pow(a[2], 4) + pow(a[3], 4);
        if(num == i)
        {
            cout<<i<<"\n";
        }
    }
    system("pause");
    return 0;
} 

about_me




文章评论

目录