鱼C论坛

 找回密码
 立即注册
查看: 959|回复: 2

[已解决]大神们,这题怎么做啊,老师说答案只有七行

[复制链接]
发表于 2021-11-14 16:36:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 麦当和笛亚 于 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[MaxSize]; //储存栈的数据空间
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[s.top--];
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[s.top];
}
int StackTraverse(Stack s)
{
int i = s.top + 1;
while(i>0){
printf("%c ",s.data[--i]);
} }
最佳答案
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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 23:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表