数组
- 数组应该定义在 main 函数的 外面。
- 范围是 0到max-1
- 定义的时候 需要使用常数;
- 数组的复制 memcpy 头文件string.h
- 清零 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;
}
网友评论