一、问题
1、多项式的值
2.有重复元素的排列问题
二、求解
1.多项式的值
(1)截图:
(2)代码:
#include <stdio.h>
int main(){
int n,x;
int ex=0,result=0,ji=1; //ex用于存放每次输入的系数 result用于存放最终结果 ji用于存放每一项的x的k次方的值
scanf("%d",&n);
scanf("%d",&x);
for(int i=0;i<=n;i++){
scanf("%d",&ex);
ex=ex*ji;
ji=ji*x; //每次求对应项的x幂,从前一项x的幂中迭代来,时间只需要O(n)可降低时间复杂度
result+=ex;
}
printf("%d",result);
return 0;
}
2.有重复元素的排列问题
(1)思考:
采用组合数学中的公式 求解有限可重排列的公式 (自己的书记了笔记,有点乱)
(2)截图:
(3)代码:
公式法
时间复杂度是O(n^2),写oj的时候第一题超时了,就有点害怕用双重循环,
还好本题给的数据规模小,时间复杂度是这个也无所谓。
#include <stdio.h>
int jiecheng(int n){ //计算阶乘的方法
int rs=1,i;
for(i=n;i>0;i--){
rs*=i;
}
return rs;
}
int main(){
int i,num1=0,rs=1; //num用于存放包含重复元素的个数,rs存放结果
char x[11]; //接收元素集合
int tong[200]={0}; //桶排序
scanf("%s",x);
for(i=0;x[i]!='\0';i++){ //计算带有重复元素的个数
num1++;
}
rs=jiecheng(num1);
for(i=0;i<num1;i++){ //利用桶排序找出重复元素的数目
tong[x[i]]++;
}
for(i=0;i<200;i++){ //公式计算
if(tong[i]==1||tong[i]==0){
continue;
}
else{
rs/=jiecheng(tong[i]);
}
}
printf("%d",rs);
return 0;
}