麦当和笛亚 发表于 2021-11-14 16:36:56

大神们,这题怎么做啊,老师说答案只有七行

本帖最后由 麦当和笛亚 于 2021-11-14 19:05 编辑

将 F(n)函数填充完整,用栈实现函数关系式 F(n)=n×F(n-1)(1≤n≤20)(n = 1 时,F(1)=1)。
PS:完整代码附在本期考核最后,可自行对照编写或复制粘贴取用。
要求:只利用栈完成算法。允许在该函数内定义其他参数但不允许定义其他函数。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MaxSize 100
typedef unsigned long long ElemType; //typedef 关键字来定义自己习惯的数据类型名称,来
//替代系统默认的基本类型名称、数组类型名称、指针
//类型名称与用户自定义的结构型名称、共用型名称、
//枚举型名称等。
typedef struct{
ElemType data; //储存栈的数据空间
int top; //栈顶指针,储存栈顶元素下一个位置的数组下标
}Stack; //栈的定义
int InitStack(Stack &s); //顺序栈初始化函数
int Push(Stack &s,ElemType e); //顺序栈入栈函数
int Pop(Stack &s,ElemType &e); //顺序栈出栈函数
int StackEmpty(Stack s); //顺序栈判空函数
int StackLength(Stack s); //顺序栈求栈中元素个数函数
ElemType top(Stack s); //顺序栈取得栈顶元素函数

int StackTraverse(Stack s); //顺序栈遍历数据元素函数
ElemType F(unsigned int n); //题目要求函数,F(n) = n * F(n-1)
int main(){
int n;
scanf("%d",&n);
printf("%llu",F(n));
return 0;
}
ElemType F(unsigned int n) //补充的函数
{
Stack s;
__________________ //编写代码使得输入 n 能够返回 F(n)的值(F(n)=n*F(n-
1),F(1)=1)
__________________ //代码可能不止一行
}
int InitStack(Stack &s)
{
memset(s.data,0,sizeof(s.data));
s.top = -1;
return 0;
}
int Push(Stack &s,ElemType e)
{
if(s.top == MaxSize){
printf("栈满,入栈操作失败");
exit(0);
}
s.data[++s.top] = e;
return 1;
}
int Pop(Stack &s,ElemType &e)
{
if(s.top == -1){
printf("栈空,出栈操作失败");
exit(0);
}
e = s.data;
return 1;
}
int StackEmpty(Stack s)
{
if(s.top == -1) return -1;
else return 0;
}
int StackLength(Stack s)
{
return s.top + 1;
}
ElemType top(Stack s)
{
if(StackEmpty(s)){
printf("栈空,无法取元素");
exit(0);
}
return s.data;
}
int StackTraverse(Stack s)
{
int i = s.top + 1;
while(i>0){
printf("%c ",s.data[--i]);
} }

jhq999 发表于 2021-11-14 22:22:06

本帖最后由 jhq999 于 2021-11-14 22:43 编辑

#include <stdio.h>
#include <stack>
#include <iostream>
using namespace std;
int main()//将 F(n)函数填充完整,用栈实现函数关系式 F(n)=n×F(n-1)(1≤n≤20)(n = 1 时,F(1)=1)。
{
        unsigned long long fn=1,n=0,i=0;
        cin>>n;//scanf("%llu",&n);
        stack<int> stk;
        while (n!=1)stk.push(n--);
        for(fn*=stk.top();stk.pop(),false==stk.empty();fn*=stk.top());
        printf("%llu",fn);
        return 0;            

}
20
2432902008176640000

jhq999 发表于 2021-11-14 22:46:12

本帖最后由 jhq999 于 2021-11-14 23:18 编辑

原来是填空啊!
ElemType fn=1,e=0;
InitStack(s);
while(1!=n)Push(s,n--);
for(;-1!=StackEmpty(s);Pop(s,e))fn*=top(s);//for(;-1!=StackEmpty(s);fn*=top(s),Pop(s,e));
      
return fn;
页: [1]
查看完整版本: 大神们,这题怎么做啊,老师说答案只有七行