c语言基础训练(四) 数组 二维数组

#include<stdio.h>
#include<string.h>
#define maxn 100
int main()
{
//字符数组==字符串 竖式问题 找出所有形如abc*de的算式   就是乘法运算 但是里边所有数字都要为输入的数字
//最后输出解的总数    三位数乘以两位数 每个竖式前应该有编号 所写程序中应该有空格
int count = 0; //计数器 
char s[20],buf[99];
scanf("%s",s); //读入一个不含空格 TAB 回车的字符串 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; //x为abc*e  y为abc*d z为总和
sprintf(buf, "%d%d%d%d%d",abc,de,x,y,z); //printf输出到屏幕  sprintf输出字符串 fprintf输出到文件  
int ok =1;
for(int i=0; i<strlen(buf); i++) //strlen获取字符串的实际长度 

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 number of solutions=%d\n",count);
}
 
}
/*
//二维数组   蛇形填数问题  n*n方阵中填数  填成蛇形
int a[maxn][maxn]; //二维数组存储题目中方阵
int n ,x,tian=0, y;
scanf("%d",&n);
memset(a , 0,sizeof(a));
tian=a[x=0][y=n-1]=1; //从第0行第n-1列开始填数 1填入进去 a[0][0] a[0][1]````a[0][n-1]
while(tian<n*n)
{
while(x+1<n && a[x+1][y]==0) a[++x][y] = ++tian; //向下走直到走到头
while(y-1>=0 && a[x][y-1]==0) a[x][--y] = ++tian; //向左 不断填数 先判断 
while(x-1>=0 && a[x-1][y]==0) a[--x][y] = ++tian; //向上 
while(y+1<n && a[x][y+1]==0) a[x][++y] = ++tian; //向右 
}
for(x=0; x<n ;x++){
for(y=0 ; y<n ;y++)
{
printf("%4d",a[x][y]); //打印矩阵 

}
printf("\n");
}

/*
//数组不能进行赋值操作  如果从数组a复制k个元素到数组b
//用memcpy(b,a,sizeof(int)*k) 必须包含头文件string.h
//开灯问题 1-n盏灯 第一个把所有灯打开 第二个关掉2的倍数开关 第三个关3倍数 
//一共k个人 最后几盏灯开着
int n ,k; 
int a[maxn];
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]; //0 1取反 
for(int i=1 ; i<=n ;i++){
if(a[i]){
printf(" "); printf("%d",i);
}
}
/*
//读入整数逆序输出 
int a[maxn];
int x ,n=0;
while(scanf("%d",&x)!=(-1))
a[n]=x;
n++;
for(int i=n-1 ; i>=1 ; i--)
printf("%d",a[i]);*/
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38663663/article/details/79657059