第1题
分析:因为小数位数不固定,所以不能用double,所以只能用字符数组。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
freopen("first.in", "r", stdin);
freopen("first.out", "w", stdout);
string a; // 或char a[10000];
cin >> a;
cout << a;
return 0;
}
第2题
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
// freopen("count.in", "r", stdin);
// freopen("count.out", "w", stdout);
int n;
cin >> n;
int num = 1; // 每层的数量
int total = 1; // 所有层的数量
for(int i = 2; i <= n; i++)
{
num += i;
total += num;
}
cout << total << endl;
return 0;
}
第3题
分析:本题考察冒泡排序。
解法一:
#include <iostream>
#include <cstdio>
using namespace std;
#define swapTube(i, j) swap(len[i], len[j]);swap(dia[i], dia[j]);swap(code[i], code[j])
int main()
{
// freopen("best.in", "r", stdin);
// freopen("best.out", "w", stdout);
int n;
cin >> n;
int len[n], dia[n], code[n];
for(int i = 0; i < n; i++)
{
cin >> len[i] >> dia[i] >> code[i];
}
for(int i = 0; i < n - 1; i++)
{
for(int j = i + 1; j < n; j++)
{
if(len[i] < len[j])
{
// 长度从大到小
swapTube(i, j);
}
else if(len[i] == len[j])
{
if(dia[i] > dia[j])
{
// 直径从小到
swapTube(i, j);
}
else if(dia[i] == dia[j])
{
if(code[i] < code[j])
{
// 编号从大到小
swapTube(i, j);
}
}
}
}
}
cout << code[0] << endl;
return 0;
}
解法二:
#include <iostream>
#include <cstdio>
using namespace std;
struct steelTube
{
int len;
int dia;
int code;
};
int main()
{
freopen("best.in", "r", stdin);
freopen("best.out", "w", stdout);
int n;
cin >> n;
steelTube tube[n];
for(int i = 0; i < n; i++)
{
cin >> tube[i].len >> tube[i].dia >> tube[i].code;
}
for(int i = 0; i < n - 1; i++)
{
for(int j = i + 1; j < n; j++)
{
if(tube[i].len < tube[j].len)
{
// 长度从大到小
swap(tube[i], tube[j]);
}
else if(tube[i].len == tube[j].len)
{
if(tube[i].dia > tube[j].dia)
{
// 直径从小到大
swap(tube[i], tube[j]);
}
else if(tube[i].dia == tube[j].dia)
{
if(tube[i].code < tube[j].code)
{
// 编号从大到小
swap(tube[i], tube[j]);
}
}
}
}
}
cout << tube[0].code << endl;
return 0;
}
思考:
1 这里为何可以直接对自定义的结构体steelTube使用swap()函数?
2 如果自己定义一个交换两根钢管的函数swap_(),该如何实现?动手试试。