网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月11日漏签0天
数据结构吧 关注:104,516贴子:883,621
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1回复贴,共1页
<<返回数据结构吧
>0< 加载中...

大佬们好if我用最简单的c语言来写123456789=100,怎样数据结构化

  • 只看楼主
  • 收藏

  • 回复
  • 贴吧用户_J7KQeQS279
  • 单链表
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

数据结构课程设计报告:在表达式“123456789=100”中左边的适当位置插入运算符“+”或“-”-以使等式成立
下列是我的代码
#include <iostream>
#include <cstdio>
using namespace std;
int nums[9], now_num = 1;
int index = 0;
int flags[9];//保存符号
// 递归计算选出的n个数的 + - 排列组合求和结果
int calulate(int i,int sum)
{
if (i == index+1) {
if (sum == 100) {
for (int j = 0; j <= index; j++) {
printf("%d", nums[j]);
if (j != index)
if (flags[j+1]) printf("-");
else printf("+");
}
printf("=%d\n", sum);
}
return 0;
}
if (i == 0) {
calulate(i + 1, nums[i]);
return 0;
}
flags[i] = 0;//0是+
calulate(i + 1, sum + nums[i]);
flags[i] = 1;//1是-
calulate(i + 1, sum - nums[i]);
return 0;
}
// n是总共要分成n个数字 r是剩余的数字
int generate_num(int n,int r)
{
//结束递归 n=1时 剩下的所有数字组成一个
if (n == 1)
{
for (int i = 0; i <= r - n; i++) {
nums[index] = nums[index] * 10 + now_num++;
}
calulate(0, 0);
nums[index] = 0;
now_num -= r - n + 1;
return 0;
}
//至多可以与其后面R-N个数字结合
for (int i = 0; i <= r-n; i++)
{
//计算结合后的数字
for (int j = 0; j < i + 1; j++) {
nums[index] = nums[index]*10+ now_num++;
}
index++;//数字个数加一
generate_num(n - 1, r - i - 1);
//回溯
index--;
nums[index] = 0;
now_num -= i + 1;
}
return 0;
}
int main()
{
for (int i = 9; i >= 2; i--) {
printf("i=%d\n", i);
//计算将9个数字分成i个数的结果
generate_num(i, 9);
}
return 0;
}


  • gunjang1234567
  • 小吧主
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这道题用递归更合适,也就是算法,数据结构要求不高


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1回复贴,共1页
<<返回数据结构吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示