zoukankan      html  css  js  c++  java
  • 数组的建立和使用

    实验6  数组的建立和使用
    
    实验目的
    
    1.掌握C语言中数组的类型定义。
    
    2.掌握数组的建立和使用的特点。
    
    实验内容
    
    程序1
    
    在计算机上以字符串的形式输入了两个任意长的整数,编写求这两个整数的积的程序。
    
    程序2
    
    若矩阵Am´n中的某个元素aij是第i行的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。假设以二维数组存储矩阵Am´n,试编写求出矩阵中所有马鞍点的算法。
     1 #include <iostream>
     2 #include <stdio.h>
     3 using namespace std;
     4 #define MAXN 1000
     5 char a[MAXN],b[MAXN];
     6 struct BigNum{
     7     int data[MAXN/4];
     8     int dig;    //位数,每位存4位数字
     9 };
    10 BigNum char2big(char s[])    //将数字从char型转换成Bignum型
    11 {
    12     int len = strlen(s),i;
    13     BigNum big;
    14     big.dig = (len-1)/4+1;    //转换之后的int数组的位数
    15     char *p = s;
    16     for(i=0;i<big.dig;i++){
    17         char t[5];
    18         if(i==0){    //将每4位取出来,放到字符串中
    19             int tt = len%4==0?4:len%4;
    20             strncpy(t,p,tt);
    21             t[tt] = '';
    22             p+=len%4;
    23         }
    24         else {
    25             strncpy(t,p,4);
    26             p+=4;
    27         }
    28         sscanf(t,"%d",&big.data[i]);    //从t中读取数字
    29     }
    30     return big;
    31 }
    32 BigNum Multi(BigNum ai,BigNum bi,BigNum &ci)    //计算ai*bi
    33 {
    34     ci.dig = ai.dig + bi.dig;
    35     int i,j,pa=ai.dig,pb=bi.dig;
    36     for(i=bi.dig-1;i>=0;i--){    //ai*bi
    37         for(j=ai.dig-1;j>=0;j--){
    38             int t = ci.dig-1-(bi.dig-1-i)-(ai.dig-1-j);
    39             int sum = ai.data[j] * bi.data[i] + ci.data[t];
    40             ci.data[t] = sum%10000;
    41             ci.data[t-1] += sum/10000;    //进位
    42         }
    43     }
    44     return ci;
    45 }
    46 void printAns(BigNum ci)    //输出结果
    47 {
    48     int i;
    49     for(i=0;i<ci.dig;i++)
    50         if(ci.data[i]!=0)
    51             printf("%d",ci.data[i]);
    52     printf("
    ");
    53 }
    54 int main()
    55 {
    56     while(cin>>a>>b){
    57         BigNum ai = char2big(a);    //转换成Bignum型
    58         BigNum bi = char2big(b);
    59         printAns(ai);
    60         printAns(bi);
    61         BigNum ci = {0};
    62         Multi(ai,bi,ci);
    63         printAns(ci);
    64     }
    65     return 0;
    66 }
     1 #include <iostream>
     2 #include <stdio.h>
     3 using namespace std;
     4 #define MAXN 1010
     5 #define MAX 0x7fffffff
     6 #define MIN -0x7fffffff
     7 int a[MAXN][MAXN];
     8 
     9 void Input(int a[][MAXN],int m,int n)    //输入二维矩阵
    10 {
    11     int i,j;
    12     for(i=1;i<=m;i++)
    13         for(j=1;j<=n;j++)
    14             scanf("%d",&a[i][j]);
    15 }
    16 
    17 void GetMAD(int a[][MAXN],int m,int n)    //输出二维矩阵的所有马鞍点
    18 {
    19     int i,j;
    20     for(i=1;i<=m;i++){
    21         int x,y;    //马鞍点的位置
    22         int Min=MAX,Max=MIN;
    23         for(j=1;j<=n;j++)    //找到这一行的最小值
    24             if(a[i][j]<Min)
    25                 Min=a[i][j],x=i,y=j;
    26         //判断这一列最大点是否为这个点
    27         for(j=1;j<=m;j++)
    28             if(a[j][y]>a[x][y])
    29                 break;
    30         if(j<=m)
    31             continue;
    32         else
    33             printf("第%d行第%d列的元素是马鞍点
    ",x,y);
    34     }
    35 }
    36 
    37 int main()
    38 {
    39     int m,n;
    40     scanf("%d%d",&m,&n);    //输入矩阵的行数和列数
    41     Input(a,m,n);    //输入二维矩阵
    42     GetMAD(a,m,n);    //输出二维矩阵的所有马鞍点
    43     return 0;
    44 }
  • 相关阅读:
    HDU 4539郑厂长系列故事――排兵布阵(状压DP)
    HDU 2196Computer(树形DP)
    HDU 4284Travel(状压DP)
    HDU 1520Anniversary party(树型DP)
    HDU 3920Clear All of Them I(状压DP)
    HDU 3853LOOPS(简单概率DP)
    UVA 11983 Weird Advertisement(线段树求矩形并的面积)
    POJ 2886Who Gets the Most Candies?(线段树)
    POJ 2828Buy Tickets
    HDU 1394Minimum Inversion Number(线段树)
  • 原文地址:https://www.cnblogs.com/yfzhang/p/3961377.html
Copyright © 2011-2022 走看看