Распечатать форму сердца со словами внутри

Я пытаюсь нарисовать форму сердца со словами внутри, как сюрприз для завтрашнего друга, но я не могу понять, как поместить слова в сердце. Я могу нарисовать только форму сердца

Код для рисования сердца

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
double x,y;
double size=10;for (x=0;x<size;x++)
{
for (y=0;y<=4*size;y++)
{
double dist1 = sqrt( pow(x-size,2) + pow(y-size,2) );
double dist2 = sqrt( pow(x-size,2) + pow(y-3*size,2) );

if (dist1 < size + 0.5 || dist2 < size + 0.5 )
cout<<"V";
else
cout<<" ";}
cout<<endl;

}

for ( x=1;x<2*size;x++)
{
for(y=0;y<x;y++)
cout<<" ";

for (y=0; y<4*size + 1 - 2*x; y++)
cout<<"V";

cout<<endl;
}

system("PAUSE");
}

Мне нужна помощь, чтобы положить слова в форме сердца

2

Решение

Примерно так же, как и другой ответ, но я уже начал, поэтому я подумал, что я могу закончить. В качестве бонуса вы можете указать, на какой линии фигуры «V» она печатается.

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
double x, y, size=10;
string message(" hello there ");
int print_line = 4;
if (message.length() % 2 != 0) message += " ";

for (x=0;x<size;x++)
{
for (y=0;y<=4*size;y++)
{
double dist1 = sqrt( pow(x-size,2) + pow(y-size,2) );
double dist2 = sqrt( pow(x-size,2) + pow(y-3*size,2) );

if (dist1 < size + 0.5 || dist2 < size + 0.5 ) {
cout << "V";
}
else cout << " ";
}
cout<<"\n";
}

for (x=1;x<2*size;x++)
{
for(y=0;y<x;y++) cout << " ";

for (y=0; y<4*size + 1 - 2*x; y++)
{
if (x >= print_line - 1 && x <= print_line + 1) {
int idx = y - (4*size - 2*x - message.length()) / 2;
if (idx < message.length() && idx >= 0) {
if (x == print_line) cout<<message[idx];
else cout << " ";
}
else cout << "V";
}
else cout << "V";
}
cout<<endl;
}
}
2

Другие решения

Вы можете просто подождать, пока не доберетесь до заранее определенной позиции в сердце и распечатать сообщение вместо «V», например так:

    char message[] = " MY MESSAGE ";
for ( x=1;x<2*size;x++)
{
for(y=0;y<x;y++)
cout<<" ";

for (y=0; y<4*size + 1 - 2*x; y++)
{
if (x == 1 && y == (2*size - strlen(message)/2))
{
cout << message;
y += strlen(message)-1;
}
else
cout<<"V";
}

cout<<endl;
}

y += strlen(message)-1; является продвижение индекса столбца в соответствии с количеством напечатанных символов. (2*size - strlen(message)/2) позиция, которая будет центрировать строку

Если вы хотите запутать код как можно больше (поэтому вы не знаете, что это за сообщение, пока код не запустится), вы можете использовать хеш-таблицу для отображения позиций на буквы или что-то в этом роде.

1

Попробуйте этот код:

#include <iostream>
#include <cmath>
using namespace std;

int main() {
cout<<"Print Heart....C++\n";

int n=7; //size of heart
for(int i=-3*n/2;i<=n;i++){
for(int j=-3*n/2;j<=3*n/2;j++){
/* inside either diamond or two circles */
if((abs(i)+abs(j)<n)||((-n/2-i)*(-n/2-i)+(n/2-j)*(n/2-j)<=n*n/2)||((-n/2-i)*(-n/2-i)+(-n/2-j)*(-n/2-j)<=n*n/2)){
cout<<"v ";
}
else{
cout<<"  ";
}
}
cout<<"\n";
}
cout<<"\n\n\nPlease don\'t forget to like.... :) :) :) \n";
cout<<"Credit: Heart Of Java : https://code.sololearn.com/caiu85u6tr30/#java";
return 0;
}

Демо здесь: https://code.sololearn.com/cuXe0axsK8R2/#cpp

0