『算法学习笔记』24th day. 字符数组

来源:互联网 发布:网络信息安全标语 编辑:程序博客网 时间:2024/05/17 06:12

在C语言中,字符串实际上就是字符数组----你可以像处理普通数组一样处理字符串,只需要注意输入输出字符串函数的使用。

exa3-3 竖式问题

找出所有形如abc*de(3位数×2位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式,所有竖式前应该有编号,以后应有一个空行。

最后输出解的总数。

  1 #include<stdio.h>  2 #include<string.h>  3 int main()  4 {  5         int i,ok,abc,de, x,y,z, count=0;  6         char s[20], buf[99];  7         scanf("%s",s);  8         for(abc=111;abc<=999;abc++)  9         { 10                 for(de=11;de<=99;de++) 11                 { 12                         x=abc*(de%10); 13                         y=abc*(de/10); 14                         z=abc*de; 15                         sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z); 16                         ok=1; 17                         for(i=0;i<strlen(buf);i++) if(strchr(s,buf[i])==NULL) ok=0; 18                         if(ok) 19                         { 20                                 printf("<%d>\n",++count); 21                                 printf("%5d\n*%4d\n-----\n%5d\n%4d\n-----\n%d\n\n",abc,de,x,y,z); 22                         } 23  24  25                 } 26  27         } 28         printf("The number of solutions=%d\n",count); 29         return 0; 30 }

样例输入:2357

样例输出:

<1>
  775
*  33
-----
 2325
2325
-----
25575


The number of solutions=1


备注:

1.sprintf输出到字符串,fprintf输出到文件,printf输出到屏幕。

多数情况下屏幕总是可以输出的,文件也一般可以随便写(除非磁盘满或者文件损坏),但字符串就不一定了。必须保证写入的字符串有足够的空间:字符个数+1。

2.char *strchr(const char *s, int c)用来查找参数s字符串中第一次出现参数c的地址并返回。

3.strlen(s) 的作用是获取字符串s的实际长度。如果开了一个字符数组a[20], 里面存放了''1234",那么实际长度是4+1 最后是一个'\0'结束标记。 之后15个字符是不确定的。

4.由于字符串本质是数组,所以也不是“一等公民”,只能用strcpy(a,b), strcmp(a,b), strcat(a,b) 来执行“赋值”,“比较”和“连接”操作。

5.用编译选项-Wall 编译程序时会给出很多(但不是所有)警告信息,以帮助查错。(书上写的,没感觉出来有什么用)


0 0