全wa求助(程序可能有点繁琐)
查看原帖
全wa求助(程序可能有点繁琐)
397382
玄君楼主2021/7/18 00:50
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000;
int main()
{
    int n = 0;
    cin >> n;
    long long s = 1;
    bool flag = false;
    bool Exchange = false;
    long long i = 2;
    for (int i = 1;i <= n;i++)
        {
            s = s * i;
        }//计算阶乘 
    int j = 1;
    int a[MAXN];
    for (int i = 1;i <= MAXN;i++)
        {
            a[i] = 0;
        }
    while (i <= s)
        {
            flag = true;
            for (int u = 2;u < i;u++)
                {
                    if (i % u == 0)
                        {
                            flag = false;
                        }
                }
            if (s % i == 0 && flag == true)
                {
                    s = s / i;
                    a[j] = i;
                    j++;
                }
            if (s % i != 0)
                {
                    i++;
                }
        }//找出该数的所有质因子 
    int o = 0;
    int b[MAXN];
    int c[MAXN];
    int h = 1;
    for (int i = 0;i <= j;i++)
        {
            if (a[i - 1] != a[i])
                {
                    if (i != 1)
                        {
//                            cout << a[i - 1] << ' ' << o << endl;
                            b[h] = a[i - 1];
                            c[h] = o;
                            h++;
                        }
                    o = 1;
                }
            if (a[i - 1] == a[i])
                {
                    o++;
                }
        }//寻找p(存在b[]),计算a(存在c[]) 
    for (int i = 1;i <= h - 1;i++)
    {
        Exchange = false;
        for (int j = n - 1;j >= i;j--)
        {
            if (b[j] < b[j + 1])
                {
                    c[0] = c[j + 1];
                    c[j + 1] = c[j];
                    c[j] = c[0];
                    b[0] = b[j + 1];
                    b[j + 1] = b[j];
                    b[j] = b[0];
                    Exchange = true;
                }
        }
        if (Exchange == false)
            {
                break;
            }
    }/*按题目要求相反的将p从大到小排序
       也不是我不想从小到大
       但是 (b[j] < b[j + 1])改成(b[j] > b[j + 1]) 
       就会输出一堆'0'*/ 
    for (int i = h - 1;i >= 1;i--)
        {
            cout << b[i] << ' ' << c[i] << endl;
        }//再倒序输出 
	return 0;
}

我也不知道问题在哪......

求助大佬。

另外......

我确实很弱,别喷我......

2021/7/18 00:50
加载中...