线性表->线性表应用

顺序表ADT模板设计及简单应用:找匹配

时间限制: 1s

类别: DS:线性表->线性表应用

晚于 2024-05-08 23:59:00 后提交分数乘系数50%

截止日期:2024-05-11 23:59:00

问题描述

目的:使用自行设计的顺序表ADT或STL的vector模板设计并实现顺序表应用场合的一些简单算法设计。

应用8:假设有一个整数类型的顺序表(假定为非空表),元素取值可能是1~N(10<=N<=100000)中的任意一个数,相同数值不会重复出现。试设计一个算法,用O(n)的时间复杂度将找出顺序表中符合条件的数对的个数,满足数对中两数的和等于N+1。

(1)顺序表ADT版本

参考函数原型:

         template<class ElemType>
         int getCount(SqList<ElemType> &A, int N);

(2)vector版本

参考函数原型:

         template<class ElemType>
         int getCount(vector<ElemType> &A, int N);

函数形参:

    A: 整数类型的顺序表,其元素取值可能是1~N(10<=N<=100000)中的任意一个数

    N: 在A中,查找两个数的和等于N+1的对数

函数返回值:

  返回统计结果

输入说明

第一行:整数N,表示给定的N值。

第二行:顺序表的数据元素(取值可为1~N中的任意一个数),以空格分隔

输出说明

第一行:顺序表A的遍历结果,以“,”分隔。

空行

第二行:统计结果

#include <iostream>
#include <vector>
#include <map>
using namespace std;
#define MAXSIZE 100;
typedef int Status; //Status 鏄嚱鏁拌繑鍥炲�肩被鍨嬶紝鍏跺�兼槸鍑芥暟缁撴灉鐘舵�佷唬鐮併��
template<class ElemType>
class Sqlist {
private:
    vector <int> elem;
    int length;
public:
    Sqlist()
    {
        length = 0; int num = 0;
        while (cin >> num) {
            elem.push_back(num);
            length++;
        }
    }
    int search(int num)
    {
        vector <int> A(elem);
        vector <int> S(num+1, 0);
        int sum = 0;
        typename std::vector<ElemType>::iterator iter = A.begin();
        while (iter != A.end()){
            S[ * iter] = 1;
            iter++;
        }
        iter = A.begin();
        while (iter != A.end()){
            int n = num + 1 - *iter;
            S[*iter] = 0;
            if (S[n] == 1) {
                S[n] = 0;
                sum++;
            }
            iter++;
        }
        return sum;
    }
    void traverse()
    {
        typename std::vector<ElemType>::iterator iter = elem.begin();
        while (iter != elem.end()) {
            cout << *iter;
            if ((iter + 1) != elem.end()) cout << ",";
            iter++;
        }
    }
};
int main()
{
    int n, num = 0;
    cin >> n;
    Sqlist <int> S;
    S.traverse();
    cout << endl << endl;
    num=S.search(n);
    cout << num;
    return 0;
}

阿姆斯特朗数

时间限制: 1s

类别: DS:线性表->线性表应用

晚于 2024-05-08 23:59:00 后提交分数乘系数50%

截止日期:2024-05-11 23:59:00

问题描述

内容:在指定范围[m,n]的所有整数中,试设计一算法找出所有的Armstrong数。

Armstrong数:如果一个k位正整数等于其各位数字的k次方之和,则称该数为阿姆斯特朗数。

 例如,在三位(k=3)的整数中,153可以满足13 + 53 + 33 = 153,这样的数称之为Armstrong数。

参考函数原型:

void findArmstrong(int m, int n, vector<int> &Armstrong);

约定:

1<=m<=n<=100000

输入说明

输入两个整数m、n,以空格分隔,表示指定范围为[m,n],需要找出该范围内的所有Armstrong数

输出说明

第一行:如果:没有ArmStrong数,输出“null”

              否则:指定范围内所有的ArmStrong数(升序排列,以“,”分隔)

#include <iostream>
using namespace std;
const int N=100000;
int a[N];
bool armstrong(int n)
{
	int p=0,m=n;
	int b[7]={0};
	while(m>0)
	{
		p++;
		b[p]=m%10;
		m/=10;
	}
	int sum=0;
	for(int i=1;i<=p;i++)
	{
		int num=1;
		int q=p;
		while(q--) num*=b[i];
		sum+=num;
	}
	if(sum==n) return 1;
	else return 0;
}
int main()
{
	int m,n;
	cin>>m>>n;
	int k=0;
	for(int i=m;i<=n;i++)
	{
        if(armstrong(i)) 
		{
			k++;
			a[k]=i;
		}
	}
	if(k==0) cout<<"null"<<endl;
	else 
	{
		for(int i=1;i<k;i++)
		cout<<a[i]<<",";
		cout<<a[k]<<endl;
	}
	return 0;
}

单链表ADT模板应用算法设计:长整数加法运算(不使用单链表存储计算结果)

时间限制: 1s

类别: DS:线性表->线性表应用

晚于 2024-05-08 23:59:00 后提交分数乘系数50%

截止日期:2024-05-11 23:59:00

问题描述

目的:使用C++模板设计单链表的抽象数据类型(ADT)。并在此基础上ÿ

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值