#include lt;iostreamgt;
#include lt;cstringgt;
#include lt;vectorgt;
#include lt;algorithmgt;
struct StudentData
{
std::string name;
std::string surname;
int math;
int phys;
int comp_science;
};
bool
comp(const StudentData amp;a, const StudentData amp;b)
{
int tmp1 = a.math + a.phys + a.comp_science;
int tmp2 = b.math + b.phys + b.comp_science;
return tmp1 gt; tmp2 true : false;
}
int
main(void)
{
int n;
std::cin gt;gt; n;
std::vectorlt; StudentData gt; data(n);
for (int i = 0; i lt; n; i++) {
std::cin gt;gt; data[i].name gt;gt; data[i].surname;
std::cin gt;gt; data[i].math gt;gt; data[i].phys gt;gt; data[i].comp_science;
}
std::sort(data.begin(), data.end(), comp);
for (int i = 0; i lt; n; i++) {
std::cout lt;lt; data[i].name lt;lt; " " lt;lt; data[i].surname lt;lt; std::endl;
}
return 0;
}
Объяснение:
Перебрать во внешнем цикле числа от 1 до 9. Для каждого из них перебрать во внутреннем цикле числа от 1 до 9. Во внутреннем цикле выполнять умножение переменных-счетчиков внешнего и внутреннего циклов. Таким образом на одну итерацию внешнего цикла произойдет девять итераций внутреннего, и сформируется одна строка таблицы умножения. После каждой строки надо перейти на новую. Это делается во внешнем цикле, после того как закончится выполняться внутренний.
Для построения таблицы необходимо использовать форматированный вывод, т.е. задавать ширину столбцов, иначе произойдет сдвиг, т.к. количество цифр в каждой строке различно.