第一题:约德尔测试
这道题看上去还是蛮简单的,我想到的就是字符串替换。由于它说了字符串不超过1000,那么我在程序里就直接建一个char数组,这样的话能够很方便的修改对应的元素。如果是用字符串指针的话,字符串是存在常量区在。没有数组之间修改方便。代码如下:
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main(){
char s1[1000],s2[1000];
cin>>s1;
cin>>s2;
int num = 0;
double ans = 0.0;
size_t len = strlen(s1);
for (int i = 0; i < len; i++) {
if ((s1[i]>='a'&&s1[i]<='z')||(s1[i]>='A'&&s1[i]<='Z')||(s1[i]>='0'&&s1[i]<='9')) {
s1[i] = '1';
}
else{
s1[i] = '0';
}
}
for (int i = 0; i < len; i++) {
if (s1[i]==s2[i]) {
num++;
}
}
ans = num*100.0/len;
printf("%.2f%%\n",ans);
return 0;
}
第二题:投篮游戏
这道题也是基本的循环判断,就是需要设置一个p个篮筐数组,用来保存里面是不是有球,无球是false,有球是true。因此代码如下:
#include <stdio.h>
#include<iostream>
using namespace std;
int main(){
int p,n;
cin>>p>>n;
int ball[n];
bool isBall[p];
for (int i=0; i<n; i++) {
cin>>ball[i];
}
//刚开始篮筐全是空的
for (int i=0; i<p; i++) {
isBall[i] = false;
}
int sum = -1;
for (int i=0; i<n; i++) {
//如果对应的篮筐中有球,也就是true,则把i+1(因为i是从0开始的)赋给sum,并退出循环。
int x = ball[i]%p;
if (isBall[x]) {
sum = i+1;
break;
}
else{
isBall[x] = true;
}
}
cout<<sum<<endl;
return 0;
}