0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
00 00 00 00 00
怎样从上面的图换取下面的图,我用一个二维数组table[3][10]得到了上面的图,可是我不会从0换去1,从00换去11。
有那位高手可以帮帮我~~先谢拉~~
请输入需要从0换去1的个数:3
1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
00 00 00 00 00
然后是,请输入需要从00换去11的个数:2
显示为:
1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
11 11 00 00 00
这是我写的代码,可以得到第一个图。。。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define ROWS 3
#define COLS 10
int main(void)
{
int table[ROWS][COLS];
int num;
int i, j, k, l;
for(i = 0; i < ROWS; i++)
for(j = 0; j < COLS; j++)
table[i][j] = 0;
for(i = 0; i < ROWS-1; i++)
{
for(j = 0; j < COLS; j++)
{
printf("%2d", table[i][j]);
}
printf("\n");
}
for(i = 2; i < ROWS; i++)
{
for(j = 0; j < COLS-5; j++)
{
printf("%2d%d ", table[i][j], table[i][j+1]);
}
printf("\n");
}
printf("\请输入需要从0换去1的个数: ");
scanf("%d", &num);
......
printf("\请输入需要从00换去11的个数: ");
scanf("%d", &num);
.......
return 0;
}
拜托各位了~~
[此贴子已经被作者于2006-9-4 13:53:49编辑过]
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define ROWS 3
#define COLS 10
int main(void)
{
int table[ROWS][COLS];
int num;
int i, j;
for(i = 0; i < ROWS; i++)
for(j = 0; j < COLS; j++)
table[i][j] = 0;
for(i = 0; i < ROWS-1; i++)
{
for(j = 0; j < COLS; j++)
{
printf("%2d", table[i][j]);
}
printf("\n");
}
for(i = ROWS-1; i < ROWS; i++)
{
for(j = 0; j < COLS/2; j++)
{
printf("%2d%d ", table[i][j], table[i][j+1]);
}
printf("\n");
}
INTER1:printf("\n请输入需要从0换去1的个数:");
scanf("%d", &num);
if(num<=COLS*2){
for(i=0;i<ROWS-1;i++){
for(j=0;j<num;){
table[i][j]=1;
j++;
if(j==COLS)
break;
else if(j==num)
break;
}
if(COLS<=num&&num<=COLS*2){
num=num-COLS;
continue;
}
else
break;
}
}
else {
printf ("\n输入的数太大,数字应该小于等于%d\n",2*COLS);
goto INTER1;
}
for(i = 0; i < ROWS-1; i++)
{
for(j = 0; j < COLS; j++)
{
printf("%2d", table[i][j]);
}
printf("\n");
}
for(i = ROWS-1; i < ROWS; i++)
{
for(j = 0; j < COLS-5; j++)
{
printf("%2d%d ", table[i][j], table[i][j+1]);
}
printf("\n");
}
INTER2:printf("\n请输入需要从00换去11的个数: ");
scanf("%d", &num);
if (num<=COLS/2){
for(j=0;j<num;j++){
table[ROWS-1][j]=1;
if(COLS/2==j)
break;
}
}
else {
printf ("\n输入的数太大,数字应该小于等于%d\n",COLS/2);
goto INTER2;
}
for(i = 0; i < ROWS-1; i++)
{
for(j = 0; j < COLS; j++)
{
printf("%2d", table[i][j]);
}
printf("\n");
}
for(i = ROWS-1; i < ROWS; i++)
{
for(j = 0; j < COLS/2; j++)
{
printf("%2d%d", table[i][j],table[i][j]);
}
printf("\n");
}
exit(0);
}
----------------解决方案--------------------------------------------------------
真是太感谢了~~
我想问一下那个num = num -COLS的值是什么。。我不太明白....
[此贴子已经被作者于2006-9-4 23:18:59编辑过]
----------------解决方案--------------------------------------------------------
怎么没人理我呢。。。
如果
输入需要从00换去11的个数:4
显示为:
1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
11 11 00 00 00
为什么和0换去1的方法不一样?区别在哪里?
----------------解决方案--------------------------------------------------------
[QUOTE]我想问一下那个num = num -COLS的值是什么。。我不太明白....[/QUOTE]
当数输入的数字大于列数,会继续替换,直到等于列数,因为这个矩阵的前两行是对称的,我把它当做一个2*10的矩阵处理。
[QUOTE]如果
输入需要从00换去11的个数:4
显示为:
1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
11 11 00 00 00
为什么和0换去1的方法不一样?区别在哪里?
[/QUOTE]
我把它当作一个一维行矩阵处理。
----------------解决方案--------------------------------------------------------
明白了。。。多谢~~~
----------------解决方案--------------------------------------------------------
不好意思,我再多问一个问题。。。。
如果
输入需要从00换去11的个数:4
1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
11 11 00 00 00
这样的话要怎样算,我用table[i][j]和table[i][j+1]做的总是少一个1或是多一个1
像是
11 10 00 00 00
或是
11 11 10 00 00
要怎么做呢。。。麻烦大家帮我一下。。。。
[此贴子已经被作者于2006-9-6 15:24:56编辑过]
----------------解决方案--------------------------------------------------------