怎样用C语言编写个爱心图象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用C语言编写个爱心图象相关的知识,希望对你有一定的参考价值。

求救!

创建一个心形图案需要的最长字符串,充分利用printf函数输出字符串的丰富控制功能,按心形图案每行所需长度和位置,对所创建的字符串进行截断并在所需位置上输出,最后在屏幕上形成由字符组成的心形图案。
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void)
    char a[]="I love you I love you I love you I l";
    printf("\\n\\n\\n");
    printf("%*.*s\\n",58,21,"_*=_           _=*_");
    printf("%*.*s\\n",61,25,"I love yo       u I love!");
    printf("%*.*s\\n",63,29,"I love you I l ove you I love");
    printf("%*.*s\\n",65,33,a);//在屏幕第65个字符处开始输出字符串a的前33个字符,其他各句意义相同
    printf("%*.*s\\n",66,35,a);
    printf("%*.*s\\n",66,35,a);
    printf("%*.*s\\n",65,33,a);
    printf("%*.*s\\n",64,31,a);
    printf("%*.*s\\n",63,29,a);
    printf("%*.*s\\n",61,25,a);
    printf("%*.*s\\n",59,21,a);
    printf("%*.*s\\n",57,17,a);
    printf("%*.*s\\n",55,13,a);
    printf("%*.*s\\n",53,9,a);
    printf("%*.*s\\n",51,5,a);
    printf("%*.*s\\n",50,3,a);
    printf("%*.*s\\n",49,1,a);
    return 0;

参考技术A 倒心:
#include<stdio.h>
#include<math.h>
void main()

int a,b,c;
for(a=1;a<=6;a++)
for(b=1;b<=6-a;b++)
printf(" ");
for(c=1;c<=2*a-1;c++)
if(a<5&&(c==1||c==2*a-1)||(a==5&&(c==2||c==5||c==8))||a==6&&(c==4||c==5||c==7||c==8))
printf("\3");
else printf(" ");

printf("\n");




双心:
#include<stdio.h>
#include<math.h>
void main()

int a,b,c;
for(a=1;a<=6;a++)

for(b=1;b<=6-a;b++)
printf(" ");
for(c=1;c<=2*a-1;c++)

if(a<5&&(c==1||c==2*a-1)||(a==5&&(c==2||c==5||c==8))||a==6&&(c==4||c==5||c==7||c==8))
printf("\3");
else printf(" ");

printf("\n");



for(a=1;a<=6;a++)

for(b=1;b<=a;b++)
printf(" ");
for(c=1;c<=11-2*a;c++)

if(a>1&&(c==1||c==11-2*a)||a==1&&(c==2||c==5||c==8))
printf("\3");
else printf(" ");


printf("\n");



正心:
#include<stdio.h>
#include<math.h>
void main()

int a,b,c;

printf(" \3\3 \3\3\n");
for(a=1;a<=6;a++)

for(b=1;b<=a;b++)
printf(" ");
for(c=1;c<=11-2*a;c++)

if(a>1&&(c==1||c==11-2*a)||a==1&&(c==2||c==5||c==8))
printf("\3");
else printf(" ");


printf("\n");

参考技术B 最简单的就是用Printf语句输出一个。本回答被提问者采纳 参考技术C 双层循环就可以了
不过最简单的楼上的兄弟已经说了

怎样用C语言编写这个程序

有一个5*5的表格,将1,2,3,4四个数填入到这25个小格中,其中1可以放在任何小格中,2必须和1相邻,3必须和1,2都相邻,4则要和1,2,3,都相邻,怎样填写这些数字才能够使这个表格里所有数字的和最大
高手在哪啊,高手,求高手指点。

#include "stdio.h"
#include "conio.h"
#include "dos.h"

typedef struct

int x;
int y; //二维坐标
int value; //每4进制位的值
int near_flag;
/*权值,
二进制:000
第1位是1表示已经与0相连
第2位是1表示已经与1相连
第3位是1表示已经与2相连
例:
110 :表示与2和1相连,但是不与0相连
111 :表示与0,1,2都相连
001 :表示与0相连,与1,2不相连
*/
xy_value;

xy_value num[26];
/* 判断权位,确定相连的数是否符合 */
jdg_flag()

int i;
for(i=0;i<25;i++)
switch (num[i].value)

case 3: if( num[i].near_flag != 6) return 0; else break;
case 2: if(( num[i].near_flag& 3)!= 3) return 0; else break;
case 1: if(( num[i].near_flag& 1)!= 1) return 0; else break;


return 1;



flag()//初始化权位

int i;
int x,y;
for(i=0;i<25;i++)

x=num[i].x;
y=num[i].y;

if((x-1)>=0) //如果越界,则越界的那边不给予权值
num[i].near_flag|=(1<<(num[(x-1)*5+y].value));
if((x+1)<=4)
num[i].near_flag|=(1<<(num[(x+1)*5+y].value));
if((y-1)>=0)
num[i].near_flag|=(1<<(num[(y-1)+x*5].value));
if((y+1)<=4)
num[i].near_flag|=(1<<(num[(y+1)+x*5].value));



/* 增加1 */
addnum(int i)

num[i].value+=1;
if(num[i].value==4)

num[i].value=0;
i=addnum(i+1);

return i;


main()


int i,sumbuff=0,sum=0;
int x,y;
for( i= 0; i< 26; i++)//初始化结构体

num[i].value= 0;
num[i].x= (int)(i/ 5); //初始化坐标
num[i].y= i% 5;


while( num[25].value== 0)

addnum(0); //0表示从第一位开始
flag();

if(!jdg_flag())


for(i=0;i<25;i++)
num[i].near_flag&=0; /*由于不符合条件,必须消除消权*/
continue;

for( i=0; i<25; i++)
sumbuff+=num[i].value; //能运算到这,说明符合条件.求和
if(sumbuff>sum)//输出目前得到的 满足条件的 最大和的 矩阵

for(x=0;x<5;x++)

for(y=0;y<5;y++)
printf("%d ",num[x*5+y].value);
printf("\n");


sum=sumbuff;
printf("now sum is:%d\n",sum);
printf("\n");

sumbuff=0;


for(x=0;x<5;x++)

for(y=0;y<5;y++)
printf("%d ",num[x*5+y].value);
printf("\n");





这是最笨的方法,一个个比较。。我跑半个小时了 - -!
一共有1000多万亿种,3G CPU,每秒30亿次浮点型运算。假设每次比较一次需要一个浮点型的话,需要100小时左右!那么。。。这个算法 将摇摇无期。。。 跑上一年我都不觉得奇怪。。
算法,基本没有。
1.当成二维坐标。
2.赋值结构体的时候,我是弄成类似25位的4进制数。每个结构体中的value为每位的数值。
26位为循环用的标志位。每次循环,4进制数,增加一。正好可以遍历所有的数。
额。。我写成的是 0,1,2,3四个数字填。
20:54--------------------------
目前情况是这样的:
3 2 1 0 1
1 0 2 2 3
3 2 2 1 2
2 1 0 0 0
0 0 0 0 0
now sum is:28
参考技术A 我目前所想到的,不一定完全正确
第一步:5*5的空格中每个空格初始化为1

第二步:把每个空格中的数字1再+1试试,符合2必须和1相邻条件则加一
然后每行就是21212,21212,21212,21212,21212

然后以此类推
参考技术B 每个格的上下左右是相邻,左上角左下角,右上角右下角,算不算相邻?我试试看能不能编出来追问

只有上下左右才算相邻

参考技术C 这个我以前解过,和一个很有名的堆房子手机游戏city bloxx的部分内容一样。
这个的数学论证方法在这:club。tech。163。com/bbs/mobile_0s22/92272018。html (把。改成.)
参考技术D 你的相邻是什么意思?斜着的(比如左上角算不)算么???一个格子旁边有8个,是最接近的那4个还是8个都可以?追问

只有最近的4个方向才可以

第5个回答  2011-08-29 int i;
int sum;
for(i=1;i<=10;i++)

sum = sum + i;


手头没用C++ 大概这个意思

以上是关于怎样用C语言编写个爱心图象的主要内容,如果未能解决你的问题,请参考以下文章

c语言代码敲的爱心没有颜色

c语言字怎样颜色变化

C语言编程

怎样用C语言编写这个程序

如何用jetbrains的Clion编写c语言

C语言打出爱心的形状?