3
1 2 3
0
4
使每个老师的工资对应的人民币张数最少,则总共最少。
#include
int main() {
int n;
while (~scanf("%d", &n) && n) {
int ans = 0, t;
for (int i = 0; i < n; i++) {
scanf("%d", &t);
while (t) { //对每个老师的工资使用贪婪思想
if (t >= 100) t -= 100;
else if (t >= 50) t -= 50;
else if (t >= 10) t -= 10;
else if (t >= 5) t -= 5;
else if (t >= 2) t -= 2;
else t -= 1;
ans++;
}
}
printf("%d\n", ans);
}
return 0;
}
#include
#include
using namespace std;
int main() {
int m, n;
while (~scanf("%d%d", &m, &n)) {
int t, col, row, Max = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &t);
if (abs(t) > abs(Max)) { //选择所有数中绝对值最大的数
Max = t;
row = i + 1, col = j + 1;
}
}
}
printf("%d %d %d\n", row, col, Max);
}
return 0;
}
仔细读题,每个测试实例后面跟一个空行
。另外,以后我永远不会随意比较浮点数和整数的大小,必须进行显式转换(虽然与题目无关…而且,abcd命名法危害很大,一个不注意就搞混乱了,如果不写注释千万少用abcd命名法。
#include
int main() {
int n, m;
while (~scanf("%d%d", &n, &m)) {
int a[55][6];
double cavg[6];
for (int i = 0; i < n; i++) {
double sum = 0;
for (int j = 0; j < m; j++) {
scanf("%d", &a[i][j]);
sum += a[i][j];
} //学生各科的平均成绩
printf("%s%.2lf", i != 0 ? " " : "", sum / m);
if (i == n - 1) printf("\n");
}
for (int i = 0; i < m; i++) {
double csum = 0; //各科学生的平均成绩
for (int j = 0; j < n; j++)
csum += a[j][i];
cavg[i] = csum / n;
printf("%s%.2lf", i != 0 ? " " : "", cavg[i]);
if (i == m - 1) printf("\n");
}
int ans = 0; //各科成绩均大于等于平均成绩的学生数量
for (int i = 0; i < n; i++) {
int flag = 0;
for (int j = 0; j < m; j++) {
if (1.0 * a[i][j] < cavg[j]) { //有一科成绩小于该科平均成绩就break
flag = 1;
break;
}
}
if (!flag) ans++;
}
printf("%d\n\n", ans);
}
return 0;
}
#include
#include
#include
using namespace std;
int main() {
int n;
string s;
scanf("%d\n", &n);
while (n--) {
getline(cin, s);
if (s[0] >= '0' && s[0] <= '9') {
printf("no\n");
continue;
}
int flag = 0;
for (int i = 0; i < s.size(); i++) {
if (!isalnum(s[i]) && s[i] != '_') {
flag = 1; break;
}
}
if (flag) printf("no\n");
else printf("yes\n");
}
return 0;
}
根本不用实际插入(逃
#include
#include
#include
using namespace std;
int main() {
string s;
while (cin >> s) {
char m = s[0];
for (int i = 0; i < s.size(); i++)
if (s[i] > m) m = s[i];
for (int i = 0; i < s.size(); i++) {
printf("%c", s[i]);
if (s[i] == m) printf("(max)");
}
printf("\n");
}
return 0;
}
#include
#include
#include
using namespace std;
int main() {
string s;
while (getline(cin, s)) {
for (int i = 0; i < s.size(); i++) { //每个单词前都有一个空格,第一个字母单独处理
if (i == 0 || (s[i - 1] == ' ' && isalpha(s[i])))
printf("%c", toupper(s[i]));
else printf("%c", s[i]);
}
printf("\n");
}
return 0;
}
随便写的代码。其实完全可以直接用130大小的哈希表映射元音字母,记录元音字母的次数,非元音字母次数均为0。
#include
#include
#include
using namespace std;
int change(char c) {
switch (c) {
case 'a': return 0;
case 'e': return 1;
case 'i': return 2;
case 'o': return 3;
case 'u': return 4;
default: return 5;
}
}
void print(char c, int a[]) {
printf("%c:%d\n", c, a[change(c)]);
}
int main() {
int n, r;
scanf("%d\n", &n);
string s;
while (n--) {
int a[5] = {0};
getline(cin, s);
for (int i = 0; i < s.size(); i++) {
r = change(s[i]);
if (r >= 0 && r <= 4) a[r]++;
}
print('a', a); print('e', a); print('i', a); print('o', a); print('u', a);
if (n != 0) printf("\n");
}
return 0;
}
求n个数的最小公倍数,其实就是第一个两个数求lcm,然后它们的lcm和后面的数依次求lcm。
#include
int gcd(int a, int b) {
return !b ? a : gcd(b, a % b);
}
int lcm(int a, int b) {
return a / gcd(a, b) * b;
}
int main() {
int n, t;
while (~scanf("%d", &n)) {
int ans = 1;
for (int i = 0; i < n; i++) {
scanf("%d", &t);
ans = lcm(ans, t);
}
printf("%d\n", ans);
}
return 0;
}
#include
#include
#include
using namespace std;
int main() {
int n;
cin >> n; getchar();
string s, rev;
while (n--) {
getline(cin, s);
rev = s;
reverse(rev.begin(), rev.end());
if (rev == s) printf("yes\n"); //利用string特性
else printf("no\n");
}
return 0;
}
这个题要求统计字符串中汉字的个数,像我们平时的ascii码都是0-127,一个字节,我们用%c输出的时候都是一个字节一个字节输出的。而汉字机内码占两个字节,且汉字的编码不论是高位字节还是低位字节都小于0。因此统计小于0的字节/符数目,除以2就好了。
#include
#include
using namespace std;
int main() {
int n;
scanf("%d\n", &n);
string s;
while (n--) {
getline(cin, s);
int ans = 0;
for (int i = 0; i < s.size(); i++)
if (s[i] < 0) ans++;
printf("%d\n", ans / 2);
}
return 0;
}