map的key可以试一个数组吗?_数据结构-数组(三)

应用题

1.设三对角矩阵Anxn按行优先顺序,压缩存储在数组B[3*n-2]之中,求:用i,j表示k的下标变换公式;用k表示i,j的下标变换公式。

设数组B从B[1]开始存储

k = 2i+j-2

i = int((k+1)/3)

j = k+2-2i(其中i从上式求出)

2.已知三维数组M[2---3,-4---2,-1---4],且每个元素占用2个存储单元,起始地址为100,按列下标优先顺序存储,求:M所含的数据元素个数;M[2,2,2],M[3,-3,3]的 存储地址。

元素个数为:2 * 7 * 6 = 84

100 + 2 * (6 * 6 + 3) = 178

100 + 2 * (1 * 7 * 6 + 1 * 6 + 4 ) = 204

3.令s="aaab",t=“abcabaa”,试分别求出它们的next函数值。

s_next = [0,1,2,0]

t_next = [0,0,0,1,2,1,1]

怎么理解kmp算法中的next数组?​www.zhihu.com
9e528a51-672d-eb11-8da9-e4434bdf6706.png

算法设计题(选做4和8)

2.一个文件中有40亿个整数,每个整数为4个字节,内存为1GB,写出一一个算法,求出这个文件的整数里不包含的一个整数。

使用bitmap算法即可

4.编写一个程序,生成大于10000 的随机整数。输出该整数,然后以英文单词的形式输出整数中的各个数字。例如,如果生成的整数是345 678,则输出应该是:The value is 345678

three four five six seven eight

9f528a51-672d-eb11-8da9-e4434bdf6706.png
/* 简单题,注意rand函数的使用即可#include <stdlib.h>#include<time.h>    srand((unsigned int)time(0));//初始化种子为随机值*/
#include<stdio.h>
#include <stdlib.h>
#include<time.h>
int main()
{
    srand((unsigned int)time(0));//初始化种子为随机值
    int num;
    int wei[100];
    int i = 0;
    num = rand() + 10001;
    printf("The value is %d n", num);
    while (num > 0)
    {
        wei[i] = num  % 10;
        i++;
        num = num / 10;
    }
    for(i = i - 1;i >= 0;i--)
    {
         switch (wei[i])
         {
         case 0:
             printf("zero ");
             break;
         case 1:
             printf("one ");
             break;
         case 2:
             printf("two ");
             break;
         case 3:
             printf("three ");
             break;
         case 4:
             printf("four ");
             break;
         case 5:
             printf("five ");
             break;
         case 6:
             printf("six ");
             break;
         case 7:
             printf("seven ");
             break;
         case 8:
             printf("eight ");
             break;
         case 9:
             printf("nine ");
             break;                                                             

         }
    }

    return 0;
}

8.若在矩阵Amxn中存在-一个元素A[i-1][j-1]满足:A[i-1][j-1]是第 i行元素中最小值,且又是第j列元素中最大值,则称此元素为该矩阵的一-个 马鞍点。假设以二维数组存储矩阵Amxn,试设计求出矩阵中所有马鞍点的算法,并分析所设计算法在最坏情况下的时间复杂度。

a1528a51-672d-eb11-8da9-e4434bdf6706.png
/*本算法为朴素算法,但是可以根据已经遍历的数据得到的结果对将要遍历的数据进行优化
遍历N*M矩阵的每个元素,如果该行有大于它的元素,break
若未找到,查看列,如果有小于它的元素,break
输出该元素行与列(行列从0开始计算)
算法复杂度O((M*N)^2)
*/
#include<stdio.h>
int main()
{
    int n, m, i, j, k, l, minn, maxx, flag ;
    int a[256][256];
    while(1)
    {
        printf("input hang lie: n");
        scanf("%d %d",&n,&m);
        printf("input jv zheng: n");
        for(i=0; i<n; i++)
            for(j=0; j<m; j++)
                scanf("%d",&a[i][j]);
        flag=0;
        printf("shuchu hang lie: n");
        for(i=0; i<n; i++)
        {
            for( j = 0; j < m; j++)
            {
                minn = a[i][j];
                for( k = 0 ; k < m; k++)
                {
                    if( minn > a[i][k])
                        break;
                }
                if( k==m)
                {
                    maxx=a[i][j];
                    for(l=0; l<n; l++)
                    {
                        if(maxx<a[l][j])
                            break;
                    }
                    if(l==n)
                    {
                        printf("%d %d %dn",i , j ,a[i][j]);
                        flag = 1;
                    }
                }
            }
        }
        if(flag==0)
            printf("mei you ma an dian:n");
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值