openjudge1.1-1.10错题整理
我是个傻子 故复制的时候出错或者输出格式出错或者ce将不被收录在此文档中
1.1
Wrong answer
#include<iostream>
int main(){
double d;
scanf("%f",&d);
printf("%.3f",d);
return 0;
}
只能说题目让输入单精度就老老实实单精度吧
给定一个字符,用它构造一个对角线长5个字符,倾斜放置的菱形。
Wrong answer
#include<iostream>
int main(){
printf(
" *\n ***\n*****\n ***\n *"
);
}
我真是sb 题目让输入一个c 我给写死了
1.2
Wrong answer
#include<bits/stdc++.h>
using namespace std;
int main(){
float i;
cin >> i;
printf("%d",i);
return 0;
}
%d输出浮点数真的跟强转不一样直接爆0了(物理
所以以后格式化就别瞎用了吧
1.3
Wrong answer
#include <bits/stdc++.h>
int main(){
float a,b;
scanf("%d %d",&a,&b);
printf("%.9lf",a/b);
}
就是说 保留9位的浮点数还是别指望float了
输入两个正整数A和B,求A*B。
输入
一行,包含两个正整数A和B,中间用单个空格隔开。1 <= A,B <= 50000。
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d", a * b);
return 0;
}
以后记着点不能只看输入范围 还要预估一下结果范围
1.4
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
float n;
scanf("%f", &n);
if (n >= 0) {
printf("%.2f", n);
} else {
printf("%.2f", -n);
}
return 0;
}
错因:当n=0.0时,-n的结果为-0.0
警钟撅烂!!!在浮点数中 0有正负之分!!!
Wrong answer
任意输入一个字符,判断其ASCII是否是奇数,若是,输出YES,否则,输出NO
#include <bits/stdc++.h>
using namespace std;
int main() {
char n;
scanf("%c", &n);
printf(n % 2 == 0 ? "YES" : "NO");
return 0;
}
我是朵拉 输出反了
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
int x;
scanf("%d", &x);
int count = 0;
if (x % 3 == 0) {
printf("3");
count ++;
}
if (x % 5 == 0) {
if (count != 0) {
printf(" ");
}
printf("5");
count ++;
}
if (x % 7 == 0) {
if (count != 0) {
printf(" ");
}
printf("7");
}
if (count == 0)
printf("n");
return 0;
}
警钟撅烂!!! if注意加else 当心多重输出!!
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
float a, b, c;
scanf("%f %f %f", &a, &b, &c);
double delta = b * b - 4 * a * c;
if (delta > 0) {
double x1 = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
double x2 = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
printf("x1=%.5f;x2=%.5f"
, max(x1, x2)
, min(x1, x2));
} else if (delta == 0) {
printf("x1=x2=%.5f", -b / 2 * a);
} else {
double r = b == 0 ? 0 : -b / (2 * a);
double i = sqrt(4 * a * c - b * b) / (2 * abs(a));
printf("x1=%.5f+%.5fi;x2=%.5f-%.5fi"
, r, i
, r, i);
}
return 0;
}
注意看\(\Delta=0\)时2 * a没打括号 运算优先级错了
1.5
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
int t, k, res = 0, exp;
scanf("%d %d", &k, &exp);
if ( k % 19 != 0) {
printf("NO");
return 0;
}
while (k > 0) {
t = k % 10;
k = k / 10;
if (t == 3) {
res ++;
if (res > exp) {
printf("NO");
return 0;
}
}
}
if (res == exp) {
printf("YES");
return 0;
}
return 0;
}
没考虑全.假如最后res < exp
的话,那就啥输出也没有了.
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, p = 1, q = 2;
double res;
scanf("%d", &n);
for (int i = 0; i < n; i ++) {
res += (double)q / p;
q = p + q;
p = q - p;
}
printf("%.4f", res);
return 0;
}
res没赋初值.我怀疑openjudge测评机上默认内存初始值全是0xff
1.6
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, k, count;
scanf("%d", &n);
int arr[n];
memset(arr, 0, sizeof arr);
for (int i = 0; i < n; i ++) {
scanf("%d", arr + i);
}
scanf("%d", &k);
for (int i = 0; i < n; i ++) {
if (arr[i] == k)
count ++;
}
printf("%d", count);
return 0;
}
count又没赋初始值.屡教不改是吧
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 10, k;
float res = 0, arr[] = {28.9, 32.7, 45.6, 78, 35, 86.2, 27.8, 43, 56, 65};
for (int i = 0; i < n; i ++) {
scanf("%d", &k);
cout << k << endl;
res += arr[i] * k;
}
printf("%.1f", res);
return 0;
}
res又没赋初值...相似
赋初值赋初值赋初值赋初值赋初值赋初值赋初值赋初值
Wrong answer
#include <bits/stdc++.h>
using namespace std;
typedef struct number {
int *arr;//from low to high
int length;
} BigNumber;
int getNum(BigNumber &a, int index) {
if (index > a.length) {
return 0;
} else {
return a.arr[index];
}
}
void freePrefix0(BigNumber &b){
for(int i = b.length;i > 0;i --){
if(b.arr[i] == 0){
// free((int *)b.arr + i);
b.length--;
}else break;
}
}
BigNumber newInstance(string s,int len) {
BigNumber res = {
(int *)calloc(1,(len + 1) * 4),
len
};
for (int i = 0; i < res.length; i ++) {
res.arr[res.length - i] = s[i] - '0';
}
return res;
}
void print(BigNumber b) {
for(int i = b.length;i > 0;i --){
printf("%d",b.arr[i]);
}
}
BigNumber add(BigNumber a, BigNumber b) {
int add = 0, len = max(a.length, b.length) + 1, sum;
BigNumber res = {
(int *)calloc(1,(len + 1) * 4),
len
};
for (int i = 1; i <= len; i ++) {
sum = getNum(a, i) + getNum(b, i) + add;
add = sum / 10;
res.arr[i] = sum % 10;
}
freePrefix0(res);
return res;
}
int main() {
string s1,s2;
cin >> s1 >> s2;
BigNumber num = newInstance(s1,s1.length());
BigNumber num1 = newInstance(s2,s2.length());
BigNumber num2 = add(num, num1);
print(num2);
return 0;
}
高精度计算.....算法题要来了
freePrefix0()
里面删除前导0当b
所代表值为0时会把所有0删掉......也就是说会输出空串.
未通过的测试点
0
0
幸好后面几道高精度都一次ac了不用写题解
1.7
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
string str;
cin >> str;
int count = 0;
for (int i = 0; i < str.length(); i ++) {
if (str[i] >= '0' && str[i] <= '9') {
count ++;
}
}
printf("%d", count);
return 0;
}
字符串输入问题.cin
的左移操作符会读入到' '
或'\n'
,而不确保读入整行.
Wrong answer
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[26];
memset(arr, 0, sizeof arr);
string str;
getline(cin, str);
for (int i = 0; i < str.length(); i ++) {
arr[str[i] - 'a'] ++;
}
for (int i = 0; i <= 26; i ++) {
if (i == 26) {
printf("no");
return 0;
} else if (arr[i] == 1) {
printf("%c", i + 'a');
return 0;
}
}
}
return 0;
}
是按照**第一个,不是按ASCII第一个啊啊啊啊啊
Wrong answer
#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-8;
int main() {
string str;
getline(cin, str);
for (int i = 0; i < str.length(); i ++) {
char c = str[i];
if (c >= 'A' && c < 'Z') {
str[i] -= 5;
if (str[i] < 'A')
str[i] += 26;
}
}
printf("%s", str.c_str());
return 0;
}
好家伙,管\(A\)不管\(Z\)是吧
Wrong answer
每个字母只对应一个唯一的“密字”,不同的字母对应不同的“密字”。“密字”可以和原字母相同。
#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-8;
int main() {
string str1, str2, sec;
getline(cin, str1);
getline(cin, str2);
getline(cin, sec);
char arr[26];
memset(arr, 0, sizeof arr);
for (int i = 0; i < str1.length(); i ++) {
char c = str1[i];
if (arr[c - 'A'] != str2[i] && arr[c - 'A'] != 0) {
printf("Failed");
return 0;
}
arr[c - 'A'] = str2[i];
}
for (int i = 0 ; i < 26; i ++) {
if (arr[i] == 0) {
printf("Failed");
return 0;
}
}
for (int i = 0; i < sec.length(); i ++) {
sec[i] = arr[sec[i] - 'A'];
}
cout << sec;
return 0;
}
我是盲人.忘了查每个字符对应密字不同了
Wrong answer
给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。
#include <bits/stdc++.h>
using namespace std;
int kmpmatch(string str, string patt) {
if (str.length() < patt.length() || patt.length() == 0)
return -1;
int next[patt.length()];
int i = 0, j = 0;
next[i] = 0;
for (i = 1; i < patt.length(); i ++) {
while (true) {
if (patt[i] == patt[j]) {
j ++;
next[i] = j;
break;
} else {
if (j == 0) {
next[i] = 0;
break;
} else {
j = next[j - 1];
}
}
}
}
i = 0, j = 0;
for (; j < patt.length(); i ++) {
if (i == str.length())
return -1;
if (str[i] == patt[j]) {
j ++;
} else if (j > 0) {
i --;
j = next[j - 1];
}
}
return i - j;
}
bool contains(string s1, string s2) {
return kmpmatch(s1, s2) != -1;
}
int main() {
string s1, s2;
cin >> s1 >> s2;
char arr[s1.length() * 2 - 1];
for (int i = 0; i < s1.length(); i ++) {
arr[i] = s1[i];
}
for (int i = 0; i < s1.length() - 1; i ++) {
arr[i + s1.length()] = s1[i];
}
for (int i = 0; i < s1.length(); i ++) {
if (contains(string(arr + i, s1.length()), s2)) {
printf("true");
return 0;
}
}
printf("false");
return 0;
}
也就是说s1
和s2
是轮换对称的......s1
包含s2
或者s2
包含s1
都可以.再次重申我是盲人.
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int kmpmatch(string str, string patt) {
if (str.length() < patt.length() || patt.length() == 0)
return -1;
int next[patt.length()];
int i = 0, j = 0;
next[i] = 0;
for (i = 1; i < patt.length(); i ++) {
while (true) {
if (patt[i] == patt[j]) {
j ++;
next[i] = j;
break;
} else {
if (j == 0) {
next[i] = 0;
break;
} else {
j = next[j - 1];
}
}
}
}
i = 0, j = 0;
for (; j < patt.length(); i ++) {
if (i == str.length())
return -1;
if (str[i] == patt[j]) {
j ++;
} else if (j > 0) {
i --;
j = next[j - 1];
}
}
return i - j;
}
bool contains(string s1, string s2) {
return kmpmatch(s1, s2) != -1;
}
int main() {
char str[33];
scanf("%s", str);
int len = 0;
for (; str[len] != '\0'; len ++) {}
if (len < 3) {
printf("%s", str);
return 0;
}
if (kmpmatch(string(str), "er") == len - 2) {
printf("%s", string(str, len - 2).c_str());
return 0;
}
if (kmpmatch(string(str), "ly") == len - 2) {
printf("%s", string(str, len - 2).c_str());
return 0;
}
if (len < 4) {
printf("%s", str);
return 0;
}
if (kmpmatch(string(str), "ing") == len - 3) {
printf("%s", string(str, len - 3).c_str());
return 0;
}
printf("%s", str);
return 0;
}
本代码中kmpmatch()
匹配的是从左至右第一个字串的位置.故当str="referer"
时,匹配到第一个"er",导致判断有误.我猜测此题可以使用string::rfind()
.
Presentation Error
#include <bits/stdc++.h>
using namespace std;
bool equalsTo(string& str1,string& str2){
if(str1.length()!=str2.length())return false;
for(int i = 0;i < str1.length();i ++){
if(str1[i] != str2[i])return false;
}
return true;
}
void ope(string &str){
for(int i = 0;i < str.length();i ++){
char c = str[i];
if(c >= 'a'&&c <= 'z'){
str[i] += 'A' - 'a';
}else if(c >= 'A'&&c <= 'Z'){
str[i] -= 'A' - 'a';
}
}
}
int main() {
string email,name,e,pwd;
int n,count = 0;
cin >> email;
scanf("%d",&n);
for(int i = 0;i < n;i ++){
cin >> name >> pwd >> e;
if(equalsTo(email,e)){
count ++;
ope(pwd);
if(count != 0)printf("%c",'\n');
cout << name << " " << pwd;
}
}
if(count == 0)printf("empty");
return 0;
}
还没输出呢就count++
.可不是多个\n
吗
Wrong answer
#include <bits/stdc++.h>
using namespace std;
string str, w1, w2;
int main() {
getline(cin, str);
int maxl = 0, minl = 101;
string max, min;
int last = -1;
int i = 0;
for (i = 0; i < str.length(); i ++) {
if (str[i] == ' ' || str[i] == ',') {
if (i - last - 1 > maxl) {
maxl = i - last - 1;
max = string(str, last + 1, i - last - 1);
}
if (i - last - 1 < minl) {
minl = i - last - 1;
min = string(str, last + 1, i - last - 1);
}
last = i;
}
}
if (i - last - 1 > maxl) {
maxl = i - last - 1;
max = string(str, last + 1, i - last - 1);
}
if (i - last - 1 < minl) {
minl = i - last - 1;
min = string(str, last + 1, i - last - 1);
}
cout << max << endl << min;
}
没照顾到中间可能有连续多个空格情况.当有此类情况时,输出短单词为""
.
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
string str;
int last = -1;
getline(cin,str);
int i = 0;
for(;i < str.length();i ++){
if(str[i] == ' '){
for(int j = last + 1;j < (last + i) / 2;j ++){
char t = str[j];
str[j] = str[i - (j - last)];
str[i - (j - last)] = t;
}
last = i;
}
}
for(int j = last + 1;j < (last + i) / 2;j ++){
char t = str[j];
str[j] = str[i - (j - last)];
str[i - (j - last)] = t;
}
cout << str;
return 0;
}
好好好,翻转算法写错了.
如图所见,由于整除是直接抛弃小数部分,那对于正数来说,就是向下取整.那如果
j < (last + i) / 2
的话,当待翻转字符串长度为偶数时,就会漏掉翻转中间一对字符,导致结果错误.
出现错误的样例:
输入
abcd
输出
dbca
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[9], t;
scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%1d",
arr, arr + 1, arr + 2, arr + 3, arr + 4, arr + 5, arr + 6, arr + 7, arr + 8, &t);
int count = 0;
for (int i = 0; i < 9; i ++) {
count += (i + 1) * arr[i];
}
count %= 11;
if (count == t) {
printf("Right");
} else {
printf("%d-%d%d%d-%d%d%d%d%d-%c",
arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], count == 10 ? 'X' : (count + '0'));
}
return 0;
}
忽略了输入最后一位是'X'
的情况而%d无法输入该数据.
Wrong answer
#include<bits/stdc++.h>
using namespace std;
string in;
int p1,p2,p3;
void replaceLetter(char left,char right){
printf("%c",left);
if(p3 == 1){
for(char c = left + 1;c < right;c ++){
printf("%s",string(p2,p1 == 1 ? c : (p1 == 2?(c + 'A' - 'a') : '*')).c_str());
}
}else{
for(char c = right - 1;c > left;c --){
printf("%s",string(p2,p1 == 1 ? c :(p1 == 2? (c + 'A' - 'a') : '*')).c_str());
}
}
printf("%c",right);
}
void replaceNumber(char left,char right){
printf("%c",left);
if(p3 == 1){
for(char c = left + 1;c < right;c ++){
printf("%s",string(p2,p1 == 3 ? '*' : c).c_str());
}
}else{
for(char c = right - 1;c > left;c --){
printf("%s",string(p2,p1 == 3 ? '*' : c).c_str());
}
}
printf("%c",right);
}
int main(){
in.resize(101);
scanf("%d%d%d\n%s",&p1,&p2,&p3,in.c_str());
int last = -2,i = 0;
for(;i < in.length();i ++){
if(in[i] == '-'){
if(i != in.length() - 1){
char l = in[i - 1],r = in[i + 1];
if(l >= 'a' && l <= 'z' && r >= 'a' && r <= 'z' && l < r){
printf("%s",string(in,last + 2,i - last - 3).c_str());
replaceLetter(l,r);
last = i;
i += 2;
}else if(l >= '0' && l <= '9' && r >= '0' && r <= '9' && l < r){
printf("%s",string(in,last + 2,i - last - 3).c_str());
replaceNumber(l,r);
last = i;
i += 2;
}
}
}
}
if(last + 2 < in.length())
printf("%s",string(in,last + 2).c_str());
return 0;
}
题意理解错误.原题"-"
前后的数字或字母是可以复用的.
导致错误的样例:
输入:
1 1 1
a-c-e
错误输出:
abc-e
正确输出:
abcde
1.8
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, a, b;
scanf("%d%d", &a, &b);
int arr[a][b];
memset(arr, 0, sizeof arr);
for (int i = 0; i < a; i ++) {
for (int j = 0; j < b; j ++) {
scanf("%d", &arr[i][j]);
}
}
int res = 0;
if (a == 1 && b == 1) {
res = arr[0][0];
} else if (a == 1) {
for (int i = 0; i < b; i ++) {
res += arr[0][i];
}
} else if (b == 1) {
for (int i = 0; i < a; i ++) {
res += arr[i][0];
}
} else
for (int i = 0; i < a; i ++) {
res += arr[i][0];
res += arr[i][b - 1];
}
for (int i = 1; i < b - 1; i ++) {
res += arr[0][i];
res += arr[a - 1][i];
}
printf("%d", res);
return 0;
}
一眼就看出来问题了对吧.\(else\)后面\(\{\}\)没了
警钟撅烂!!!if
或者else
后面一定要想清楚加不加\(\{\}\)!!
Wrong answer
显然,经过(n-1)次上述过程, n*n的矩阵会被转换为一个1*1的矩阵。
请求出每次消减前位于第二行第二列的元素的值。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
scanf("%d", &n);
int arr[n][n];
memset(arr, 0, sizeof arr);
for (int i = 0; i < n; i ++) {
for (int j = 0; j < n; j ++) {
scanf("%d", &arr[i][j]);
}
}
int count = 0;
for (; n > 1; n --) {
if (count != 0) {
printf("\n");
}
count = 1;
printf("%d", arr[1][1]);
for (int i = 0; i < n; i ++) {
int m = arr[i][0];
for (int j = 1; j < n; j ++) {
m = min(m, arr[i][j]);
}
for (int j = 0; j < n; j ++) {
arr[i][j] -= m;
}
}
for (int i = 0; i < n; i ++) {
int m = arr[0][i];
for (int j = 1; j < n; j ++) {
m = min(m, arr[j][i]);
}
for (int j = 0; j < n; j ++) {
arr[j][i] -= m;
}
}
for (int i = 1; i < n - 1; i ++) {
for (int j = 0; j < n; j ++) {
arr[i][j] = arr[i + 1][j];
}
}
for (int i = 1; i < n - 1; i ++) {
for (int j = 0; j < n; j ++) {
arr[j][i] = arr[j][i + 1];
}
}
}
printf("\n%d", arr[0][0]);
return 0;
}
这题我的评价是很迷.照这个描述应该输出n - 1行.但是要求输出n行.所以只能猜题意了.不做解释.
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
string str;
scanf("%d\n", &n);
getline(cin,str);
int line = str.length()/n;
char arr[str.length()/n][n];
for (int i = 0; i < line; i ++) {
if(i % 2 == 0) {
for (int j = 0; j < n; j ++) {
arr[i][j] = str[i * 5 + j];
}
}else{
for (int j = 0; j < n; j ++) {
arr[i][n - 1 - j] = str[i * 5 + j];
}
}
}
for(int i = 0;i < n;i ++){
for(int j = 0;j < line;j ++)printf("%c",arr[j][i]);
}
return 0;
}
写一半忘了n是可以输入的了,我给写死了.看起来我这智力有点低.
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int arr[402], ind = 0, res[20][20], l;
void fill(int x, int y, int w, int h) {
if (w == 0 || h == 0 || ind >= l)
return;
if (w == 1) {
for (int i = 0; i < h; i ++) {
res[x + i][y] = arr[ind];
ind ++;
if (ind >= l)
return;
}
} else if (h == 1) {
for (int i = 0; i < w; i ++) {
res[x][y + i] = arr[ind];
ind ++;
if (ind >= l)
return;
}
} else {
for (int i = 0; i < w; i ++) {
res[x][y + i] = arr[ind];
ind ++;
if (ind >= l)
return;
}
for (int i = 1; i < h; i ++) {
res[x + i][y + w - 1] = arr[ind];
ind ++;
if (ind >= l)
return;
}
for (int i = w - 2; i >= 0; i --) {
res[x + h - 1][y + i] = arr[ind];
ind ++;
if (ind >= l)
return;
}
for (int i = h - 2; i > 0; i --) {
res[x + i][y] = arr[ind];
ind ++;
if (ind >= l)
return;
}
fill(x + 1, y + 1, w - 2, h - 2);
}
}
int main() {
int n, m = 0;
string str;
cin >> n >> m;
getchar();
getline(cin, str);
l = str.length() * 5;
memset(arr, 0, sizeof arr);
memset(res, 0, sizeof res);
int index = 0, len;
for (len = 0; len < str.length(); len ++) {
int num;
if (str[len] == ' ') {
num = 0;
} else {
num = str[len] - 'A' + 1;
}
for (int i = 5; i > 0; i --) {
arr[index] = (num >> (i - 1)) % 2;
index ++;
}
}
fill(0, 0, m, n);
for (int i = 0; i < n; i ++) {
for (int j = 0; j < m; j ++) {
printf("%d", res[i][j]);
}
}
return 0;
}
将res
的大小扩大至int[21][21]
后可以ac.目前尚不明确其中原理.
1.9
Wrong answer
2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;
#include <bits/stdc++.h>
using namespace std;
int main() {
int max = -1, t1, t2, t3, n, sum = 0, mon;
char t[25];
memset(t, 0, sizeof(t));
string name;
char c1, c2;
scanf("%d", &n);
for (int i = 0; i < n; i ++) {
scanf("%s%d%d %c %c %d", &t, &t1, &t2, &c1, &c2, &t3);
mon = 0;
if (t1 > 80 && t3 >= 1)
mon += 8000;
if (t1 > 85 && t2 >= 80)
mon += 4000;
if (t1 > 90)
mon += 2000;
if (t1 > 85 && c2 == 'Y')
mon += 1000;
if (t2 > 80 && c1 == 'Y')
mon += 850;
sum += mon;
if (mon > max) {
max = mon;
name = string(t);
}
}
printf("%s\n%d\n%d", name.c_str(), max, sum);
return 0;
}
笑死我了,80取等了.取等条件在oi还能看见
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, maxv = 0, arr[10000], t;
scanf("%d", &n);
for (int i = 0; i < n; i ++) {
scanf("%d", &t);
maxv = max(t, maxv);
arr[t] ++;
}
for (int i = 0; i <= maxv; i ++) {
if (i != 0)
printf("\n");
printf("%d", arr[i]);
}
return 0;
}
arr
没初始化.
Wrong answer
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, x, y, res = -1;
scanf("%d\n", &n);
int arr[n][4];
for (int i = 0; i < n; i ++) {
scanf("%d%d%d%d", &arr[i][0], &arr[i][1], &arr[i][2], &arr[i][3]);
}
scanf("%d%d", &x, &y);
for (int i = 0; i < n; i ++) {
if (x >= arr[i][0] && x <= arr[i][0] + arr[i][1]
&& y >= arr[i][1] && y <= arr[i][3]) {
res = i + 1;
}
}
printf("%d", res);
return 0;
}
笑死我了 下表访问错了 我是sb.这测试样例都能过 我怀疑oj是故意放了这么水一个样例
1.10
Wrong answer
一个长度小于10的字符串表示病人的ID
#include <bits/stdc++.h>
using namespace std;
typedef struct stu {
int age, ord;
char id[7];
};
bool compare(stu a, stu b) {
bool oa = a.age >= 60, ob = b.age >= 60;
if (oa != ob) {
return oa;
} else {
if (oa) {
if (a.age != b.age) {
return a.age > b.age;
} else {
return a.ord < b.ord;
}
} else {
return a.ord < b.ord;
}
}
}
int main() {
int n;
scanf("%d", &n);
stu arr[n], t;
for (int i = 0; i < n; i ++) {
t = stu();
t.ord = i;
memset(t.id, 0, sizeof t.id);
scanf("%s%d", t.id, &t.age);
arr[i] = t;
}
sort(arr, arr + n, compare);
for (int i = 0; i < n; i ++) {
if (i != 0)
printf("\n");
printf("%s", arr[i].id);
}
return 0;
}
这个name
数组开小了。。。不知道为什么测试样例的name
长度都是7。。
Runtime Error
#include <bits/stdc++.h>
using namespace std;
int main() {
string words[200];
string line;
getline(cin, line);
int index, count;
for (;;) {
index = line.find(" ");
if (index == -1) {
words[count] = line;
count ++;
break;
}
if (index != 0) {
words[count] = line.substr(0, index);
count ++;
}
if (index != line.length() - 1) {
line = line.substr(index + 1);
} else {
break;
}
}
sort(words, words + count);
string last;
for (int i = 0; i < count; i ++) {
if (words[i] != last) {
if (i != 0) {
printf("\n");
}
printf("%s", words[i].c_str());
last = words[i];
}
}
return 0;
}
当index = line.find(" ")
替换为index = line == "" ? -1 : line.find(" ")
后可以ac.也就是说,line
在一定情况中可能为""
,但目前尚不明确其中原理.