基本算法练习五

来源:互联网 发布:μtorrent mac 编辑:程序博客网 时间:2024/05/01 10:06

第一题:约德尔测试

这道题看上去还是蛮简单的,我想到的就是字符串替换。由于它说了字符串不超过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;}
0 0