您的位置:首页 > 编程语言 > C语言/C++

c++方程的解数

2018-02-02 14:50 651 查看
[b]习题:方程的解数[/b]
蒜头君在求解一个n元的高次方程:
 
其中:x1,x2,…,xn 是未知数,k1,k2,…,kn是系数,p1,p2,…,pn是指数。方程中所有数都一定是整数。
假设未知数 1≤xi≤M,i=1…n。你能帮蒜头君算出这个方程的整数解个数吗?

[b]输入格式[/b]

第一行输入一个整数 n(1≤n≤4)。
第二行输入一个整数 M(1≤M≤150)。
第3行到第
n+2 行,每行输入两个整数,分别表示 ki(∣ki∣≤20)和
pi(1≤pi≤4)。两个整数之间用一个空格隔开。

[b]输出格式[/b]

输出一行,输出一个整数,表示方程的整数解的个数。

[b]样例输入[/b]

3
100
1 2
-1 2
1 2

[b]样例输出[/b]

104

#include <stdio.h>

#include <iostream>

#include <cstring>

using namespace std;

int n,M;

int k[5],p[5];

int mypow[160][5];

int ans=0;

void init()

{

 memset(mypow,1,sizeof(mypow));

 for(int i=1;i<=150;i++)

 for(int j=1;j<=4;j++)

 mypow[i][j]=i*mypow[i][j-1];

}

void dfs(int num,int mark)

{

 if(num!=0&&num!=n&&mark==0)

 return;

 if(num==n)

 {

  if(mark==0)

  ans++;

  return;

 }

 for
4000
(int i=1;i<=M;i++)

 dfs(num+1,mark+k[num]*mypow[i][p[num]]);

}

int main()

{

 cin>>n;

 cin>>M;

 init();

 for(int i=0;i<n;i++)

 cin>>k[i]>>p[i];

 dfs(0,0);

 cout<<ans;

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: