C语言中的基础数组问题

以Carnegie Mellon University的CS本科为目标的IBDP学生独自开的编程学习记录博客
数组训练,会在这里记录学习过程中经历和一些笔记
现在用的书是c prime plus和算法竞赛入门经典

  1. 十分重要!
    //使用逻辑取反
    //思路中,将数组中所有储存的数值设置为0(伪);
    //如果灯的编号为人编号的倍数,逻辑取反(模拟开关过程)
    //打印为真的数值
    #include
    #include
    #define maxn 1010
    int a[maxn];
    int main()
    {
    int n, k, first = 1;
    memset (a, 0, sizeof(a));
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= k; i++)
    for (int j = 1; i <= 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", i);
    }
    printf("\n");
    }
    return 0
    }

  2. 蛇形填数
    //可以通过int a[maxn] [maxn]声明一个二维数组,这个二维数组中的两个量不必相等
    //记住蛇形填数的while命令行

#include
#include
#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] [y+1])
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;
}

竖式问题:
找出所有形如abc*de(三位数乘两位数)的算式,使得在完整的竖式中,所有数字都属于一个特别的数字集合。
//sprintf
//和
//strchr作用是在一个字符串中查找单个字符
//printf输出到屏幕 fprintf输出到文件 sprintf输出到字符串
//可以用strlen(s)返回字符串s中结尾标记之前的字符个数。字符串中的各个字符是s[0], s[1], ….,s[strlen(s)-1].
//由于字符串本身是数组,所以只能strcpy(a, b), strcmp(a, b), strcat(a, b)来进行赋值,比较,连接操作
//scanf(“%s”, s)读入一个不含空格,TAB和回车符的字符串,存入字符数组s
(前面不含&符号)

#include
#include
int main()
{
int count = 0;
char s[20], buf[99];
scanf("%s", s);
for (int abc = 111; abc <= 999; abc++)
for (int de = 11; de <= 99; de++)
{
int x = abc * (de % 10), y = abc * (de / 10), 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) //在buf[i]中一旦有字符不满足于s,则设置ok = 0
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 number of solutions = %d\n”, count);
return 0;
}

你可能感兴趣的:(My,10,Grade,Studying,Note)