美文网首页
【算法】数组与字符串

【算法】数组与字符串

作者: Me极客 | 来源:发表于2019-04-20 15:55 被阅读0次

数组

  1. 数组应该定义在 main 函数的 外面。
  2. 范围是 0到max-1
  3. 定义的时候 需要使用常数;
  4. 数组的复制 memcpy 头文件string.h
  5. 清零 memset(a,0,sizeof(a));

语法糖

!整数 = 0
!0 =1

空格的输出

输出n个整数,应该有n-1个空格被输出;
方法:一个空格+一个整数;只有第一个不需要输出空格;

代码练习;

开灯问题;


【算法】数组与字符串
#include<stdio.h>
#include<string.h>
# define Manx 1010
int a[Manx];
Int main(){
    Int n,k,first=0;
    Memset(a,0,sizeof(a));
    Scanf(“%d%d”,&n,&k);
    For(int I=1;I<=k;I ++){
        For(int j=1;j<=n;j++){
            If (j%i==0) a[j]=!a[j];
        }
    }
    For(int I=1;i<=n;I++){
        If(a[i]){
            If(first) first=0;
            Else printf(“ ”);
            Printf(“%d”,a[i]);
        }
    }
    Printf(“\n”);
    Return 0;
}


问题2:蛇形问题;


【算法】数组与字符串 【算法】数组与字符串

核心思想:

  • 按照一圈一圈的画;
  • 分清楚画圈 顺时针 or 逆时针;
  • 墙壁检测,用到了求负,可以直接利用墙壁的数值;

代码:

#include<stdio.h>
#include<string.h>
#define maxn 20
int a[maxn][maxn];
int main(){
    int n,x,y,tot=0;
    scanf("%d",&n);
    memset(a,0,sizeof(a));
    tot = a[x=0][y=n-1] = 1;
    while(tot<n*n){
        while(x+1<n && !a[x+1][y]) a[++x][y]=++tot;
        while(y-1>0 && !a[x][y-1]) a[x][--y]=++tot;
        while(x-1>0 && !a[x-1][y]) a[--x][y]=++tot;
        while(y+1<n && !a[x][y+1]) a[x][y++]=++tot;
    } 
    for(x=0;x<n;x++){
        for(y=0;y<n;y++){
            printf("%3d",a[x][y]);
        }
        printf("\n");
    }
    return 0;
}

字符串

注意 输入输出 字符串函数的使用;
字符串对应的整数编码;
Scanf(“%s”,s);
Sprintf() 把信息输出到字符串。
Strchr() 在一个字符串中查找单个字符;

字符串 赋值 比较 连接 strcpy strcmp strcat 在 string.h 中实现;

问题; 竖式计算方法

【算法】数组与字符串
#include<stdio.h>
#include<string.h>
int main() {
    char s[20], buf[99];
    int count = 0;
    scanf("%s", s);
    for (int abc = 111; abc <= 999; abc++) 
    {
        for (int de = 11; de <= 99; de++)
        {
            int x = abc*(de % 10);
            int y = abc*(de / 10);
            int z = abc * de;
            sprintf(buf, "%d%d%d%d%d", abc, de, x, y, z);
            int ok = 1;
            for (int i = 0; i < strlen(buf); i++)
                if (strchr(s, buf[i]) == NULL) ok = 0;
            if (ok) {
                printf("<%d>\n", ++count);
                printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n", abc, de, x, y, z);
            }
        }                
    }
    printf("The numbver of solutions = %d\n", count);
    return 0;
}

相关文章

网友评论

      本文标题:【算法】数组与字符串

      本文链接:https://www.haomeiwen.com/subject/lqllgqtx.html