西工大noj(11~20)

前言:西工大noj刷题记录

           代码在CodeBlocks16.01环境下编译通过

11题:

/*
 *题目:用二分法求方程在(-10,10)之间的根(保留2位小数)
 */
#include <iostream>
#include <stdio.h>

using namespace std;

int noj_011()
{
    double x, left = -10, right = 10;
    x = (left + right) / 2;
    while ((2*x*x*x-4*x*x+3*x-6) <= -0.01 || (2*x*x*x-4*x*x+3*x-6) >= 0.01)
    {
        if ((2*x*x*x-4*x*x+3*x-6) <= -0.01)
        {
            left = x;
            x = (left + right) / 2;
        }
        else
        {
            right = x;
            x = (left + right) / 2;
        }
    }
    printf("%5.2f", x);

    return 0;
}

12题: 

/*
 *题目:计算500~800区间内素数的个数cnt,并按所求素数的值从大到小的顺序,再计算其间隔减,加之和,取第一个素数-第二个素数+第三个素数……的值sum
 */
#include <iostream>

using namespace std;

int noj_012()
{
    int cnt = 0, sum = 0, flag = 0;
    for (int num = 800; num >= 500; --num, flag = 0)
    {
        for (int subnum = 2; subnum * subnum <= num; ++subnum)
        {
            if (num % subnum == 0)
            {
                flag = 1;
                break;
            }
        }
        if (!flag)
        {
            ++cnt;
            if (cnt % 2 == 1)
            {
                sum += num;
            }
            else
            {
                sum -= num;
            }
        }
    }

    cout << cnt << " " << sum << endl;

    return 0;
}

13题:

/*
 *题目:利用公式pi=4*(1-1/3+1/5-1/7+1/9……),括号中最后一项的绝对值小于10^(-6),计算pi的值(保留6位小数)
 */
#include <iostream>
#include <stdio.h>

using namespace std;

int noj_013()
{
    double pi = 0, item = 1;
    int num = 1;
    while (1 / item >= 1e-6)
    {
        if (num % 2 == 1)
        {
            pi += 1 / item;
        }
        else
        {
            pi -= 1 / item;
        }

        item += 2;
        num++;
    }
    pi = pi * 4;

    printf("%5.6f", pi);

    return 0;
}

14题:

/*
 *题目:某级数的前两项A1=1,A2=1,此后有An=A(n-2)+2A(n-1),求依次对于M=100,1000和10000求出对应的n值,
 *      使其满足:Sn<M且S(n+1)>=M,Sn=A1+A2+……+An
 */
#include <iostream>

using namespace std;

int noj_014()
{
    for (int M = 100; M <= 10000; M *= 10)
    {
        int sum1 = 0, sum2 = 0, A_first = 1, A_second = 1, temp, num = 0;
        while (!(sum1 < M && sum2 >= M))
        {
            sum1 += A_first;
            sum2 = sum1 + A_second;
            temp = A_first;
            A_first = A_second;
            A_second = 2 * A_second + temp;
            num++;
        }
        cout << num << endl;
    }

    return 0;
}

15题:

/*
 *题目:求一个整数的任意次方的最后三位数
 */
#include <iostream>

using namespace std;

int noj_015()
{
    int num, power;
    long long prdct = 1;
    cout << "请输入整数:";
    cin >> num;
    cout << "请输入幂次:";
    cin >> power;
    for (int i = 1; i <= power; ++i)
    {
        prdct *= num;
    }
    prdct = prdct % 1000;
    cout << prdct;

    return 0;
}

16题:

/*
 *题目:任何一个自然数n的立方都是n个连续的奇数之和,例如1^3=1,2^3=3+5;3^3=7+9+11,求出输入的自然数对应的连续奇数
 */

 #include <iostream>

 using namespace std;

 int noj_016()
 {
     int naturalnum, sum = 0, first = 1, temp = 1;
     cout << "输入自然数:";
     cin >> naturalnum;
     while (naturalnum * naturalnum * naturalnum > sum)
     {
         sum = 0;
         if (naturalnum != 1)
         {
             first = temp + 2;
         }
         temp = first;
         for (int i = 1; i <= naturalnum; ++i)
         {
            sum += first;
            first += 2;
         }
     }

     cout << naturalnum << "*" << naturalnum << "*" << naturalnum << "=" << naturalnum * naturalnum * naturalnum << "=";
     for (int i = 1; i < naturalnum; ++i)
     {
         cout << temp << "+";
         temp += 2;
     }

     cout << temp;

     return 0;
 }

17题:

/*
 *题目:某大学两个乒乓球队比赛,各出3人,甲队为A,B,C,乙队为X,Y,Z,抽签后A说不和X打,C说不和X,Z打,编写程序找出对手名单
 */

 #include <iostream>

 using namespace std;

 int noj_017()
 {
     char A, B, C;
     for (A = 'X'; A <= 'Z'; ++A)
     {
         if (A != 'X')
         {
             for (C = 'X'; C <= 'Z'; ++C)
             {
                 if (C != 'X' && C != 'Z' && C != A)
                 {
                     for (B = 'X'; B <= 'Z'; ++B)
                     {
                         if (B != A && B != C)
                         {
                             cout << "A" << "=" << A << endl;
                             cout << "B" << "=" << B << endl;
                             cout << "C" << "=" << C << endl;
                         }
                     }
                 }
             }
         }
     }
     return 0;
 }

18题:

/*
 *题目:输入两个整数,求两个整数之间所有的素数,两个整数的大小顺序是任意的
 */
#include <iostream>
#include <math.h>

using namespace std;

int noj_018()
{
    int first_num, second_num, bgn, nd, flag = 0;
    cout << "请输入两个整数:";
    cin >> first_num >> second_num;
    bgn = (first_num >= second_num? second_num: first_num);
    nd = (first_num >= second_num? first_num: second_num);
    for (int i = bgn; i <= nd; ++i)
    {
        flag = 0;
        for (int j = 2; j <= sqrt(nd); ++j)
        {
            if (i % j == 0)
            {
                flag = 1;
                break;
            }
        }
        if (flag == 0)
        {
            cout << i << " ";
        }
    }

    return 0;
}

19题:

/*
 *题目:有一个分数数列:2/1,3/2,5/3,8/5,13/8,21/13,……求出这个数列的前20项之和(保留6位小数)
 */

#include <iostream>
#include <stdio.h>

using namespace std;

int noj_019()
{
    double denominator = 1, member = 2, temp;
    double sum = 0;
    for (int i = 1; i <= 20; ++i)
    {
        sum += member / denominator;
        temp = denominator;
        denominator = member;
        member = temp + denominator;
    }
    printf("%5.6f", sum);

    return 0;
}

20题:

/*
 *题目:输入一个数,输出其整数部分的位数
 */

#include <iostream>

using namespace std;

int noj_020()
{
    double num;
    int digit = 0;
    cout << "请输入数,正负都行:";
    cin >> num;
    if (num < 0)
    {
        num = 0 - num;
    }
    if (num < 1)
    {
        cout << "0";
        return 0;
    }
    while (num >= 1)
    {
        num /= 10;
        digit++;
    }

    cout << digit;

    return 0;
}

 

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值