此题为笔试题的读程序题。
题目程序代码如下:
#include<iostream>
using namespace std;
int number,ndata,data[100],sum;
void solve(int s,int sign,int n){
int i;
for(i=s;i<ndata;i++){
sum+=sign*(number/n/data[i]);
solve(i+1,-sign,n*data[i]);
}
}
int main(){
int i;
cin>>number>>ndata;
sum=0;
for(i=0;i<ndata;i++) cin>>data[i];
solve(0,1,1);
cout<<sum<<endl;
return 0;
}
输入:1000 3 5 13 11
输出:
分析:此题是典型的for循环内插入递归调用,其实也可以转换成循环嵌套。在求解此题之前可以先缩小一下规模,寻找程序运行的方式。只要找到这个子问题的方式,那么这个题也就引刃而解了。
我们不如先把规模缩小。
#include<iostream>
using namespace std;
int number,ndata,data[100],sum;
void solve(int s,int sign,int n){
int i;
for(i=s;i<ndata;i++){
sum+=sign*(number/n);
cout<<"1."<<sum<<