新手OJ, 找出字符串中出现最多的字母,本机运行正确, 但是wrong answer, 求大神指点

Description

钟Sir是一个迷信的(superstitious)家伙。他相信每一个字符串(string)里都有一个幸运字符。我们可以通过以下方法找到这个字符。例如,在字符串abbccc中,c 出现的次数最多,所以这个幸运字符就是 c 啦!(>_<)  (钟Sir的想法好简单啊…)

Input

第一行是测试数据的组数n,接下来的每组测试数据占一行,每行数据不超过1000个字符且非空。

字符串里只含小写字母。

Output

每组数据对应输出一行,包括出现次数最多的字符和该字符出现的次数,中间是一个空格。如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。

Sample Input

2
abbccc
adfadffasdf

Sample Output

c 3
f 4
=====t===t

#include
#include
int main(void){
int n, g, i, z[28], max, xia;
char c[1050], ch;
scanf("%d", &n);
ch=getchar();
for(g=1; g<=n; g++){

for(i=0; i<=27; i++)
z[i]=0;

i=0;
while((c[i]=getchar())!=0&&c[i]!='\n')
i++;

for(i=0; i<strlen(c); i++)
switch(c[i]){
case 'a': z[0]++; break;
case 'b': z[1]++; break;
case 'c': z[2]++; break;
case 'd': z[3]++; break;
case 'e': z[4]++; break;
case 'f': z[5]++; break;
case 'g': z[6]++; break;
case 'h': z[7]++; break;
case 'i': z[8]++; break;
case 'j': z[9]++; break;
case 'k': z[10]++; break;
case 'l': z[11]++; break;
case 'm': z[12]++; break;
case 'n': z[13]++; break;
case 'o': z[14]++; break;
case 'p': z[15]++; break;
case 'q': z[16]++; break;
case 'r': z[17]++; break;
case 's': z[18]++; break;
case 't': z[19]++; break;
case 'u': z[20]++; break;
case 'v': z[21]++; break;
case 'w': z[22]++; break;
case 'x': z[23]++; break;
case 'y': z[24]++; break;
case 'z': z[25]++; break;
}

max=z[0]; xia=0;
for(i=1; i<=25; i++)
if(z[i]>max){
max=z[i];
xia=i;
}

ch='a'+xia;
if(c[0]=='\n')
printf("");
else
printf("%c %d\n", ch, max);
}
return 0;
}

复制可运行。

1个回答

 #include <string.h>
#include"stdio.h"
int main(void)
{
    int n,i, z[26], max, xia;
    char c[1050], ch;

    scanf("%d",&n);
    while(n>0)
    {
        n--;
        scanf("%s", c);

        for(i=0; i<26; i++)
            z[i]=0;
        xia=strlen(c);

        for(i=0; i<xia; i++)
            z[c[i]-'a']++;

        max=z[0]; xia=0;
        for(i=1; i<=25; i++)
        if(z[i]>max){ 
            max=z[i];
            xia=i;
        }

        ch='a'+xia;
        printf("%c %d\n", ch, max);
    }

    return 0;
}
qq_32653757
qq_32653757 这位大哥,谢谢你的回答, 两分不多, 但真的由衷感激
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
新手OJ, 删除字符串中指定字符, 感觉没错, 但总是超出输出限制, 求大神指点
Description 从一个字符串中,删去某个字符。 Input 有多个测试用例,每个测试用例占两行,第一行是要删除的字符,第二行是一个字符串。字符串长度不超过1024。 Output 对应每个测试用例,单独输出一行:删除那个字符之后的字符串。 Sample Input a abacad b abbbbb Sample Output bcd a Hint 这题可以不用存储字符串,只需逐个读入字符,判断是否==要删的字符,!=则输出。 +++++++++++++++++++++++++++++++++++++++++++++====== #include<stdio.h> int main(void){ char ch, ch1, cha, c[1030]; int i; while((ch1=getchar())!=0){ cha=getchar(); gets(c); for(i=0; i<=1026; i++){ if(c[i]=='\0') break; if(c[i]!=ch1) printf("%c", c[i]); } printf("\n"); } return 0; } PS: 我用他提示的思路的话, 提示超时
c++ oj 题目,求大神帮忙
19:字符串移位包含问题 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。 给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。 输入 一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过30。 输出 如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true,否则输出false。 样例输入 AABCD CDAA 样例输出 true 我的代码: ``` #include<bits/stdc++.h> using namespace std; int main() { char c[1001],s[1001]; cin>>s; cin>>c; if(strlen(s)<strlen(c)) swap(s,c); strcat(s,s); if(strstr(s,c)==0) cout<<"false"; else cout<<"true"; return 0; } ``` 本地运行是对的,一上oj就出现了Runtime error 啥原因。。
在VS上运行没有问题,但提交oj出现段错误,在VS上该如何调试?
在VS上运行没有问题,但提交oj出现段错误,在VS上该如何调试?
oj的一道很简单的题目,不知道错在哪了,请大牛指点!
19:字符串移位包含问题 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。 给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。 输入 一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过30。 输出 如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true,否则输出false。 样例输入 AABCD CDAA 样例输出 true ``` #include<bits/stdc++.h> using namespace std; int main() { char s[30],c[30]; cin>>s>>c; if(strlen(c)==0) { cout<<"true"<<endl; return 0; } int l=strlen(s); for(int i=0;i<l;i++) { char h; h=s[0]; for(int j=0;j<l-1;j++) { s[j]=s[j+1]; } s[l-1]=h; if(strstr(s,c)) { cout<<"true"<<endl; return 0; } } cout<<"false"<<endl; return 0; } ``` 只过了9个点,改了一晚上,崩溃啊
大数加减,VS上可以运行,oj上显示段错误,哪里出问题了?
#include <iostream> using namespace std; struct list { char num; list * next; }; void creat(list * & head) { list *s,*p; s=new list; s->next=NULL; cin.get(s->num); while(s->num!='\n') { if((s->num>='0'&&s->num<='9')||s->num=='-') { if(head==NULL) {head=s; head->next=NULL; p=s;} else if(head->num=='-') {if(p->num=='-') {p->next=s; p=s;} else {s->next=head->next; head->next=s;}} else if(head->num>='0'&&head->num<='9') {s->next=head; head=s;} } s=new list; s->next=NULL; cin.get(s->num); } delete s; return; } void add(list *h1,list *h2,list * & h3) { list *h; h=new list; h->next=NULL; int a,b,d,c=0; while(h1||h2) { if(h1&&h2) { a=(int)h1->num-48; b=(int)h2->num-48; d=a+b+c; c=0; if(d/10==0) { h->num=d+48; c=0; } else { c=d/10; d%=10; h->num=d+48; } if(h3==NULL) {h3=h; h3->next=NULL;} else {h->next=h3; h3=h;} h1=h1->next; h2=h2->next; h=new list; } else if(h1) { a=(int)h1->num-48; d=a+c; if(d/10==0) { h->num=d+48; c=0; } else { c=d/10; d%=10; h->num=d+48; } h->next=h3; h3=h; h1=h1->next; h=new list; } else if(h2) { a=(int)h2->num-48; d=a+c; if(d/10==0) { h->num=d+48; c=0; } else { c=d/10; d%=10; h->num=d+48; } h->next=h3; h3=h; h2=h2->next; h=new list; } } if(c) { h->num=c+48; h->next=h3; h3=h; h=new list; } } int count(list *head) { int f; list *g; g=head; for(f=0;g;f++) { g=g->next; } return f; } int compare(list *h1,list *h2) { int t,a,b,e,j; e=count(h1); j=count(h2); if(e>j) t=1; else if(e<j) t=0; else { while(h1||h2) { a=(int)h1->num-48; b=(int)h2->num-48; if(a>=b) t=1; else t=0; h1=h1->next; h2=h2->next; } } return t; } void Minus(list *h1,list *h2,list * & h3) { int a,b,c=0,d,t; list *h; h=new list; h->next=NULL; t=compare(h1,h2); if(t) { while(h1||h2) { if(h1&&h2) { a=(int)h1->num-48; b=(int)h2->num-48; if(a-c>=b) { d=a-c-b; h->num=d+48; c=0; } else { d=a-c+10-b; h->num=d+48; c=1; } if(h3==NULL) {h3=h; h3->next=NULL;} else {h->next=h3; h3=h;} h1=h1->next; h2=h2->next; h=new list; } else if(h1) { a=h1->num-48; if(a-c>=0) { d=a-c; h->num=d+48; c=0; } else { d=a-c+10; h->num=d+48; c=1; } h->num=d+48; h->next=h3; h3=h; h1=h1->next; h=new list; } } } else { Minus(h2,h1,h3); h->num='-'; h->next=h3; h3=h; } } void show(list *head) { int a,c,d=1,q=1; list *h; h=head; if(h->num=='-') { h=h->next; } while(q) { if(h->num!='0') q=0; else h=h->next; } a=count(h); c=a%3; while(h) { if(c) { cout<<h->num; h=h->next; c--; d=0; } else if(h&&d) { c=3; d=0; } else if(h) { cout<<','; c=3; } } cout<<endl; } int main() { int x,a,b,c,i; char y; cin>>x; for(i=0;i<x;i++) { a=1; b=1; c=0; cin>>y; cin.get(); list * h1=NULL; list * h2=NULL; list * h3=NULL; creat(h1); creat(h2); if(y=='+') { if(h1->num=='-') { a=0; h1=h1->next; } if(h2->num=='-') { b=0; h2=h2->next; } if(a&&b) add(h1,h2,h3); else if(a) Minus(h1,h2,h3); else if(b) Minus(h2,h1,h3); else { list *s; s=new list; s->num='-'; s->next=NULL; add(h1,h2,h3); s->next=h3; h3=s; } } else if(y=='-') { if(h1->num=='-') { a=0; h1=h1->next; } if(h2->num=='-') { b=0; h2=h2->next; } if(a&&b) Minus(h1,h2,h3); else if(a) add(h1,h2,h3); else if(b) { list *s; s=new list; s->num='-'; s->next=NULL; add(h1,h2,h3); s->next=h3; h3=s; } else Minus(h2,h1,h3); } if(h3->num=='-') { c=1; h3=h3->next; } if(c) cout<<'-'; show(h3); } }
新手OJ,C语言 去除字符串中的所有空格模块, 不知为何出错,求大神指点
作用: 把数组a中的所有空格去除, 并把后面的往前移动。 例如: a b c 变成:abc 字符指针 *p *q 数组a[] for(p=&a[0]; *p!='\0'; p++) if(*p==' ') for(q=p; *(q+1)!='\0'; q++) *q=*(q+1); //去除a字符串中的空格 但总是不对, 求大神指点。
c语言输入字符串时输入指定的字符停止输入问题。
问题描述 寻找若干行文本中最长的一行 输入说明 输入为多个字符串(每个字符串长度不超过100个字符),每个字符串占一行,输入的行为“***end***”时表示输入结束 输出说明 输出其中最长的一行长度后换行再输出最长行的内容,如果最长行不止一个,则输出其中的第一行。 输入样例 abce abdf dlfd ***end*** 当 ``` char a[100][100]; int i,j,n,m=0; for(i=0;;i++) {gets(a[i]); if(m=(strcmp(a[i],"***end***"))==0) break;} ``` 可以从循环中出来 但当 ``` for(i=0;;i++) {gets(a[i]); if(a[i]=="***end***") break; ``` 就不行,一直处于循环中; 以下是全代码,请大神们帮看看有什么问题,oj上一直是结果错误 ``` #include<stdio.h> #include<string.h> int main() { char a[100][100]; int i,j,n,m=0; for(i=0;;i++) {gets(a[i]); if(m=(strcmp(a[i],"***end***"))==0) break;} for(j=0;j<i;j++) { if(strlen(a[j])<strlen(a[j+1])) n=j+1; else n=j;} printf("%d\n%s",strlen(a[n]),a[n]); return 0; } ```
接入支付宝授权登录,报系统异常,请稍后再试(resultcode:4000).
![图片说明](https://img-ask.csdn.net/upload/202002/18/1581996119_905390.jpg) 如图中所示,跳转至支付宝之后显示系统异常,捕捉回调的时候resultcode是4000, memo是:系统异常请稍后再试,用于授权的信息如下: apiname=com.alipay.account.auth&app_id=2019052965369662&app_name=mc&auth_type=AUTHACCOUNT&biz_type=openservice&method=alipay.open.auth.sdk.code.get&pid=2088531207634483&product_id=APP_FAST_LOGIN&scope=kuaijie&sign_type=RSA2&target_id=52201d6f-69e0-48ac-9122-554c04b60884&sign=XEsNCoq5LQGPup4TIdkUFp9hfQ8GI8waJZqVcwcXCs3qS6hP/nFKsi1rqMKMVVH37x8cxQVBnVeywJDEJX4XIIDW4gCZzpFqH/0mmD9ihYunsNi/sYvyt3CYRxLLKct2qWYVh3cxNbC4l/f0FykNrS7uNe+Z+1lMc8Cg8T3wSm6OJ1R2XVKLDTMVFz+2IyoAdLY7AQI8AEw4k6iOuvswXfY3RoLB8fw2Z7s/xhIYtj1MWou4hkabcjATryGYVfk68yZExxeSjkKO/osUX8rZBNh88cbz6Plypki/avqOGM+8n6hNjeMtGQKaZ2UBrKE1zTuis5yV1GUC64nLhEQhcw== 已经在网上搜了一大圈了,从昨晚到现在一支没解决,有同学遇到过类似的问题吗? 谢谢!
在oj上显示运行时错误,有大佬能帮忙看一下吗?
问题描述: 任意给定两个字符串str1与str2, str1与str2中可以包含任意字符。你的任务是统计字符串str2在str1中出现的次数。 如字符串str1为“asasasbbbasbas”,str2为“as”,则统计结果为5。注意如果字符串str1为“aaaaa”,字符串str2为“aaa”,则统计结果为3。 输入与输出要求: 输入两个长度不超过100的字符串,以换行符结束。输出统计次数,占一行。 程序运行效果: dhd dhdhdfg dhd dh zx67 dhd mklodhdh↙ dhd↙ 6↙ #include <stdio.h> #include <stdlib.h> int main() { int i, count; char str1[102], str2[102], *s1, *s2, *str; s1=(char*)malloc(102); s2=(char*)malloc(102); str=(char*)malloc(102); fgets(str1,102,stdin); for(i=0;str1[i]!='\n';i++)//统计str1中的字符个数 { } str1[i]='\0';//将str1中的最后一个'\n'转化成'\0' fgets(str2,102,stdin); for(i=0;str2[i]!='\n';i++)//统计str2中的字符个数 { } str2[i]='\0';//将str2中的最后一个'\n'转化成'\0' count=0;//count的初始化 str=str1;//将str1的字符放入str中,能够让下面操作直接用str++ while(*str!='\0') { s1=str;//s1为str的当前判断字符 s2=str2;//s2为str2的首字符 while(*s1==*s2&&*s2!='\0')//判断两个字符串的每个字符是否相等,若相等且s2并未结束则各往后读一位字符 { s1++; s2++; } if(*s2=='\0')//跳出while循环时s2已经结束了则满足条件 { count++;//若满足条件count加一 } str++; } printf("%d", count); free(s1); free(s2); free(str); return 0; }
运行时runtime error 不清楚哪里错了 求指点 oj上的
#include<stdio.h> int main() { int n,j=0,i,s[100]; scanf("%d",&n); while (n!=0) { int a[100]; static int k=0; s[k]=0; for (i=0;i<n;i++) scanf("%d",&a[i]); for (i=n-1;i>0;i--) { if (a[i]+a[i-1]>0||a[i]+a[i-1]==0) s[k]=s[k]+a[i]; } if (a[0]>0) s[k]=s[k]+a[0]; k=k+1; scanf("%d",&n);j=j+1; } for (i=0;i<j;i++) {if (i<j-1)printf("%d\n",s[i]); else printf("%d",s[i]); } return 0; }
OJ题目运行错误,本地运行没问题
### 小白求救,运行错误,但找不出问题在哪 在本地成功运行,也测试了好多组数据。但是本人可能欠缺经验,编写程序习惯不好,可能一些细节没注意,导致提交到OJ上去,显示运行错误。我自己又找不到问题。。。跪求大佬帮忙看看 ####题目描述 在n个整数中查找指定数字。 ####输入 输入数据有多组,每组数据包括两行,第一行包含一个整数n(0<n<=100)和n个整数。第二行包含一个整数m表示要查找的关键字。 ####输出 如果在n个整数中有和m相等的输出该整数,如果没有输出null。 ####样例输入 ``` 5 1 2 3 4 5 3 3 10 20 30 100 ``` 样例输出 ``` 3 null ``` 小白的代码: ``` import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] array = new int[100]; while (true) { int cin = sc.nextInt(); for (int i = 0; i < cin; i++) { int inp = sc.nextInt(); array[i] = inp; } int inpp = sc.nextInt(); for (int i = 0; i < cin; i++) { if (array[i] == inpp) { System.out.println(inpp); break; } else if (arr[i] != inpp && arr[i] == arr[cin - 1]) System.out.println("null"); } } } } ``` --- #2019-10-26 问题已解决 while循环的循环条件不能用true,要用hasNext
大一新生 学校oj上的问题 实在不知道哪里错了 大佬们能帮我解决一下吗?
``` #include<stdio.h> #include<string.h> int main() { int len2,len1,i,max,n; while(scanf("%d",&n)!=EOF) { char s1[2000]={0},s2[1000]={0}; gets(s1); gets(s2); len1=strlen(s1); max=0; for(i=1;i<len1;i++)//寻找一串字符中最大的字符 { if(s1[i]>s1[max]) max=i; } len2=strlen(s2); for(i=len1-1;i>=max+1;i--)//将s1字符串中最大字符后面的字符移动len2个位置 { s1[i+len2]=s1[i]; } for(i=max+1;i<=max+len2;i++)//将s2中的字符插入到s1当中 { s1[i]=s2[i-max-1]; } puts(s1); } return 0; } ``` 问题:给定两个字符串s和t,在s字符串中的最大字符后边插入字符串t。 输入:测试数据有多组,每组包含两个字符串s和t,分别占两行,均不超过100个字符。 输出:对于每组测试数据,输出插入后的新字符串,单独占一行。若有多个最大字符,则插在第一个之后。 我试了很多组数据都对了(用的dev c++),但是在学校的oj上还是wa
请问这个代码为什么oj上tuntime error了呀,小白求解?
![图片说明](https://img-ask.csdn.net/upload/202002/11/1581411651_49287.png) #include <iostream> using namespace std; int a[101]={0}; int main() { int n,i,j; cin>>n; for(i=2;i<=n;i++) for(j=1;j<=n;j++) { if(a[j]==0) { if(j==i||j%i==0)a[j]=1; } else { if(j==i||j%i==0)a[j]=0; } } for(i=1;i<=n;i++) if(a[i])cout<<i<<" "; return 0; }
为什么这道题根据程序,样例可以正确输出,却不能在OJ上AC?是我的代码出问题了吗?
题目描述如下: ![图片说明](https://img-ask.csdn.net/upload/201912/28/1577529512_755416.png) ![图片说明](https://img-ask.csdn.net/upload/201912/28/1577529527_134470.png) 我的代码如下: ``` #include<stdio.h> int main() { int n,fin1,fin2; long a1=1,a2=1; char cx1,cx2; scanf("%d",&n); fflush(stdin); while((cx1=getchar())!='\n') { a1=a1*(cx1-64) /*计算出第一行的字母所代表的编号的乘积*/ } while((cx2=getchar())!='\n') { a2=a2*(cx2-64);/*计算出第二行的字母所代表的编号的乘积*/ } fin1=a1%n; /*用第一行的乘积取模*/ fin2=a2%n; /*用第二行的乘积取模*/ if(fin1==fin2) { printf("Attack!\n"); } else { printf("Stay\n"); } return 0; } ``` 自己测试了几组数据,都没有问题的,可是AC不了。来向各位大佬求助!
新手OJ, C语言 字符串顺序后移模块,超时,优化无思路 求大神对指点
for(i=1; i<=m; i++){ a=z[n]; for(p=&z[n]; p>=&z[2]; p--) *p=*(p-1); z[1]=a; } ++++++++++++++++++++++++++++++++++++++++ 作用:将数组z[n]中的所有元素进行向右移m位, 多出来的左端补上。 例如: 12345 m=1 变成 51234 但是我的算法效率太低, 当数组很长, m很大时超时, 求大神指点
小白一枚,回文串和安全密码问题在codeblock运行没啥问题,但是oj上显示答案错误,大佬们能帮忙看看吗
#include <bits/stdc++.h>///安全密码 using namespace std; int main() { char s[55]; while(scanf("%s",&s)!=EOF){ int len =strlen(s); if(len<8){ printf("NO\n"); continue; } bool low= false,up=false,sng=false,num=false; for(int i=0;i<=len;i++){ if(isdigit(s[i]))num=true; else if(islower(s[i]))low=true; else if(isupper(s[i]))up=true; else sng=true; } int cnt=0; if(low)cnt++; if(up)cnt++; if(num)cnt++; if(sng)cnt++; if(cnt>=3)printf("YES\n"); else printf("NO\n"); } return 0; } #include <bits/stdc++.h>///回文串 using namespace std; char s[103]; bool judge(){ int len=strlen(s); for(int i=0;i<len/2;i++){ if(s[i]!=s[len-i-1])return false; } return true; } int main() { int T=1; while(scanf("%s",&s)!=EOF){ if(judge())printf("case%d:yes\n",T++); else printf("case%d:no\n",T++); } }
新手OJ一题,自认为正确, 但是wrong,恳求大神指出
Description 钟Sir是一个迷信的(superstitious)家伙。他相信每一个字符串(string)里都有一个幸运字符。我们可以通过以下方法找到这个字符。例如,在字符串abbccc中,c 出现的次数最多,所以这个幸运字符就是 c 啦!(>_<) (钟Sir的想法好简单啊…) Input 第一行是测试数据的组数n,接下来的每组测试数据占一行,每行数据不超过1000个字符且非空。 字符串里只含小写字母。 Output 每组数据对应输出一行,包括出现次数最多的字符和该字符出现的次数,中间是一个空格。如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。 Sample Input 2 abbccc adfadffasdf Sample Output c 3 f 4 ----------------- #include<stdio.h> int main(void){ int z[30], n, t, g, i, j, a, xia, max; char ch; scanf("%d", &t); for(g=1; g<=t+1; g++){ for(i=1; i<=28; i++) z[i]=0;//记录数组初始化 for(i=1; i<=1000; i++){ ch=getchar(); if(ch=='\n') break; a=ch-'a'+1; z[a]++; }//统计到记录数组 max=-9; for(i=1; i<=26; i++){ if(z[i]>max) {max=z[i]; xia=i;} } if(g!=1){ ch='a'+xia-1; printf("%c ", ch); printf("%d\n", max); } } return 0; }
为什么刷OJ的时候,很多人都是使用的数组范围大约多了9
比如数组最长10000,但定义的时候时int a[10009];
对于每一个输入,单独输出一行。如果该字符串是合法的IP,输出YES,否则, 输出NO
1.问题:IP地址判断 描述 在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。合法的IP是这样的形式: A.B.C.D 其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不会有前导零存在,如001这种情况。现在,请你来完成这个判断程序吧 输入 输入由多行组成,每行是一个字符串,输入由“End of file”结束。字符串长度最大为30,且不含空格和不可见字符。 输出 对于每一个输入,单独输出一行。如果该字符串是合法的IP,输出YES,否则, 输出NO 样例 输入 输出 202.115.32.24 YES a.b.c.d NO End of file 2.我自己写的一段代码 ``` #include <stdio.h> #include <string.h> int main() { char c[35]; int i, d1, d2, d3, mid, zhi1, zhi2, zhi3, zhi4, oo,gd=0, m; while (1) { for (i = 0; i <= 35; i++) { c[i] = -1; } //初始化 i = 0; m = 0; while (c[m] != '\n') { c[i] = getchar(); m = i; i++; } oo = m - 1; if (strcmp(c, "End of file") == 0) break; else { for (i = 0; i <= 35; i++) //字符转成数字 { c[i] = c[i] - 48; } for (i = 0; i <= oo; i++) { if ((c[i] >= 10 || c[i] < 0) && c[i] != '.' - 48) gd++; } if (gd != 0 || (c[oo] < 0 || c[oo]>9)) { mid = 0; goto end; } //找到小数点。格式不符合规范就结束 for (d1 = 0; d1 <= 35; d1++) { if (c[d1] == '.' - 48) break; } for (d2 = d1 + 1; d2 <= 35; d2++) { if (c[d2] == '.' - 48) break; } for (d3 = d2 + 1; d3 <= 35; d3++) { if (c[d3] == '.' - 48) break; } if (d1 == 36 || d2 == 36 || d3 == 36 || d1 == 0 || d2 - d1 == 1 || d3 - d2 == 1 || d1 >= 4 || d2 - d1 - 1 >= 4 || d3 - d2 - 1 >= 4 || oo - d3 >= 4) { mid = 0; goto end; } //下面判断输入的值是否符合规范 //第一段 if (d1 == 3) { if (c[0] == 0 || (c[0] == 0 && c[1] == 0)) { mid = 0; goto end; } else zhi1 = c[0] * 100 + c[1] * 10 + c[2]; } else if (d1 == 2) { if (c[0] == 0) { mid = 0; goto end; } else zhi1 = c[0] * 10 + c[1]; } else if (d1 == 1) { zhi1 = c[0]; } //第二段 if (d2 - d1 == 4) { if (c[d1 + 1] == 0 || (c[d1 + 2] == 0 && c[d1 + 1] == 0)) { mid = 0; goto end; } else zhi2 = c[d1 + 1] * 100 + c[d1 + 2] * 10 + c[d1 + 3]; } else if (d2 - d1 == 3) { if (c[d1 + 1] == 0) { mid = 0; goto end; } else zhi2 = c[d1 + 1] * 10 + c[d1 + 2]; } else if (d2 - d1 == 2) { zhi2 = c[d1 + 1]; } //第三段 if (d3 - d2 == 4) { if (c[d2 + 1] == 0 || (c[d2 + 1] == 0 && c[d2 + 2] == 0)) { mid = 0; goto end; } else zhi3 = c[d2 + 1] * 100 + c[d2 + 2] * 10 + c[d2 + 3]; } else if (d3 - d2 == 3) { if (c[d2 + 1] == 0) { mid = 0; goto end; } else zhi3 = c[d2 + 1] * 10 + c[d2 + 2]; } else if (d3 - d2 == 2) { zhi3 = c[d2 + 1]; } //第四段 if (oo - d3 == 3) { if (c[d3 + 1] == 0 || (c[d3 + 1] == 0 && c[d3 + 2] == 0)) { mid = 0; goto end; } else zhi4 = c[d3 + 1] * 100 + c[d3 + 2] * 10 + c[d3 + 3]; } else if (oo - d3 == 2) { if (c[d3 + 1] == 0) { mid = 0; goto end; } else zhi4 = c[d3 + 1] * 10 + c[d3 + 2]; } else if (oo - d3 == 1) { zhi4 = c[d3 + 1]; } if (zhi1 >= 0 && zhi2 >= 0 && zhi3 >= 0 && zhi4 >= 0 && zhi1 <= 255 && zhi2 <= 255 && zhi3 <= 255 && zhi4 <= 255) { mid = 1; } else { mid = 0; } end: if (mid == 0) printf("NO\n"); else printf("YES\n"); } } return 0; } ``` 我试过了各种能想到的情况都是符合题目要求的,但是oj只给我了10.5/30分,我不知道有什么情况没有考虑到,求大神指点^o^。 ------------------------------------------------------------------------------- 谢谢大家,解决问题了^o^,循环的过程里面有变量的值改变了,我忘了在循环开始的时候初始化。不过还是谢谢大家的想法,我学到了很多呢!
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
死磕YOLO系列,YOLOv1 的大脑、躯干和手脚
YOLO 是我非常喜欢的目标检测算法,堪称工业级的目标检测,能够达到实时的要求,它帮我解决了许多实际问题。 这就是 YOLO 的目标检测效果。它定位了图像中物体的位置,当然,也能预测物体的类别。 之前我有写博文介绍过它,但是每次重新读它的论文,我都有新的收获,为此我准备写一个系列的文章来详尽分析它。这是第一篇,从它的起始 YOLOv1 讲起。 YOLOv1 的论文地址:https://www.c
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片
简明易理解的@SpringBootApplication注解源码解析(包含面试提问)
欢迎关注文章系列 ,关注我 《提升能力,涨薪可待》 《面试知识,工作可待》 《实战演练,拒绝996》 欢迎关注我博客,原创技术文章第一时间推出 也欢迎关注公 众 号【Ccww笔记】,同时推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《提升能力,涨薪可待篇》- @SpringBootApplication注解源码解析 一、@SpringBootApplication 的作用是什
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库——点这里跳转 文章目录Python语言高频重点汇总**GitHub面试宝典仓库——点这里跳转**1. 函数-传参2. 元类3. @staticmethod和@classmethod两个装饰器4. 类属性和实例属性5. Python的自省6. 列表、集合、字典推导式7. Python中单下划线和双下划线8. 格式化字符串中的%和format9.
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
ES6基础-ES6的扩展
进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
web前端javascript+jquery知识点总结
Javascript javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ,语法同java类似,是一种解释性语言,边执行边解释。 JavaScript的组成: ECMAScipt 用于描述: 语法,变量和数据类型,运算符,逻辑控制语句,关键字保留字,对象。 浏览器对象模型(Br
Qt实践录:开篇
本系列文章介绍笔者的Qt实践之路。 背景 笔者首次接触 Qt 大约是十多年前,当时试用了 Qt ,觉得不如 MFC 好用。现在 Qt 的 API、文档等都比较完善,在年初决定重新拾起,正所谓技多不压身,将 Qt 当为一种谋生工具亦未尝不可。利用春节假期的集中时间,快速专攻一下。 本系列名为“Qt实践”,故不是教程,笔者对 Qt 的定位是“使用”,可以帮助快速编写日常的工具,如串口、网络等。所以不
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
一条链接即可让黑客跟踪你的位置! | Seeker工具使用
搬运自:冰崖的部落阁(icecliffsnet) 严正声明:本文仅限于技术讨论,严禁用于其他用途。 请遵守相对应法律规则,禁止用作违法途径,出事后果自负! 上次写的防社工文章里边提到的gps定位信息(如何防止自己被社工或人肉) 除了主动收集他人位置信息以外,我们还可以进行被动收集 (没有技术含量) Seeker作为一款高精度地理位置跟踪工具,同时也是社交工程学(社会工程学)爱好者...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问