Ezt a feladatot meg lehet oldani egyszerűbben mert úgy érzem túl van variálva? C#
//Rextester.Program.Main is the entry point for your code. Don't change it.
//Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5
using System;
using System.Text;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
//Your code goes here
int tablePerLine = 10;
int multiplyTableTo = 17;
int InATableTo = 8;
int columns = multiplyTableTo/tablePerLine;
int firstInLine = -(tablePerLine-1), lastInLine = 0;
bool columnsIsRounded = multiplyTableTo%tablePerLine==0;
string space7 = " ";
StringBuilder spaces = new StringBuilder(space7, space7.Length);
if(!columnsIsRounded) ++columns;
for(int i = 0; i < columns; ++i) {
if(i==columns-1 && !columnsIsRounded) {
firstInLine+= tablePerLine;
lastInLine+=multiplyTableTo%tablePerLine;
}
else {
lastInLine+=tablePerLine;
firstInLine+= tablePerLine;
}
for(int j = 1; j <= InATableTo; ++j) {
for(int k = firstInLine; k <= lastInLine; ++k) {
int product = j*k;
int productLength = product.ToString().Length;
int startIndexForRemove = (spaces.Length-1) - (productLength-1);
spaces.Remove(startIndexForRemove, productLength-1);
Console.Write("{0}*{1}={2}" + spaces, k,j,product);
spaces.Replace(spaces.ToString(), space7);
}
Console.WriteLine();
}
Console.WriteLine();
}
}
}
}
Lehetne rajta egyszerűsíteni, tény, de az is kérdés,
hogy milyen optimalizációt akarsz? Pl dupla for-on
belül inteket deklarálni szvsz nem épp hatékony meg-
oldás. Persze egy helloworld szintű programnál ez még
elmegy, de ha ilyennel van tele egy pár száz oldalas
kód, lehetnek érdekességek :)
És mi volt a feladat?
Akármi is ez, biztos, hogy túl van tolva.
Gondolom egy szorzótábla kiíratása.
A szóközökkel szenvedés helyett használd a Write beépített tagolását, pl. így:
Console.Write("{0,10}", i);
Az oszlopok számolgatása helyett pedig inkább indíts egy harmadik for ciklust.
"Az oszlopok számolgatása helyett pedig inkább indíts egy harmadik for ciklust"
Ezt nem értem hogy gondolod három for ciklusom van de számolgatások nélkül egy harmadik for al nem tudom kitalálni hogy hogyan képzeled.
De nagyon kíváncsivá tettél kérlek mutasd be. :P
A többi válaszadónak is kösz nem gondoltam volna hogy a Write metódussal lehet így tabolni.
Amúgy ennyi a kód:
using System;
class Program
{
static void Main()
{
for (int i = 1; i <= 10; i++)
{
for (int j = 1; j <= 10; j++)
{
Console.Write($"{i}*{j}={i * j}\t");
}
Console.WriteLine();
}
}
}
"és még olyat is csinál hogy a kiíratásokat pontosan egymás alá illeszti"
Ez nem igazán működik a kódodban. Ha az InATableTo értékét 12-re állítom teljesen szétcsúszik...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!