中兴2018笔试模拟题

问题:输入一个字符串数组,如果该字符串数组中的每个字符串的尾元素与下一个字符串的首元素是一样的,则认为该字符串数组是一个好的数组(忘记了原题,怎么称呼这样的数组,暂且这样叫吧)。如果是好的数组则返回1,第一个字符串的首元素与最后一个字符串的尾元素没有要求。
int Array(char** arr, int length ){ //输入为字符串数组,及其长度
}
输入1:["abegc","cef","fnmde", "exy"],
返回:1

输入2:["agd", "dcnf", "deg"]
返回:0

中兴的题目可以说非常简单了,但是,本人算法渣,编码也弱。我想到的思路就是遍历一遍数组,并使用指针p1定位到当前字符串尾部字符,指针p2定位到下一个字符的首字母,然后比较两者是否相等。 但是问题就是在C++中不知道该如何使用这样两个指针去依次这样遍历一个字符串数组?(望路过的大神不吝解答,如果有更好的思路也望指导,谢谢!!)
全部评论
#include<iostream> using namespace std; int Array(char **arr, int length ){ //输入为字符串数组,及其长度 if(arr==NULL||length<1) return -1; for(int i=1;i<length;i++) { if(arr[i-1][strlen(arr[i-1])-1]!=arr[i][0])//比较字首和自尾的字符,不等就返回0 return 0; } return 1; } int main() { char *arr[4]={"abc","cde","fg","gh"}; cout<<Array(arr,4); return 0; }
点赞 回复 分享
发布于 2017-08-24 22:19
中兴2018校招【首场】宣讲会 在深圳!在深圳! 当你走进毕业季 迷惘无措难抉择 不知道自己适合什么岗位? 不知道自己想要怎样的未来? 来吧!来吧!来吧! 我们为你准备了 详细的岗位推介 丰富的奖品礼品 更有美女HR姐姐亲临现场 陪你从诗词歌赋聊到人生哲学 让我们陪你去闯 那些很冒险的梦 助你成为未来梦想家! 【中兴通讯2018校园招聘宣讲会火爆开启】 【哈工大(深圳)】8月24日 19:00 A栋502 【南方科技大学】8月25日 19:00 图书馆110报告厅 创未来!由你来! 欢迎加入中兴2018届广深校招QQ群550172551
点赞 回复 分享
发布于 2017-08-24 16:00
int canArrangeWorld2( int num, char**arr ) { if(num==1)         return 1;     char c1=0;     char c2=0;     char **arr_copy=arr;     for(int i=0;i<num-1;i++)     {         int len=strlen(*arr_copy);         c1=(*arr_copy)[len-1];         c2=*(++arr_copy)[0];         if(c1!=c2)         {             return -1;         }     }     return 1; } int main() {     char* a[] ={"anc", "cde" ,"edf" ,"fgh" ,"hag"};     char **arr=a;     for(int i=0;i<5;i++)     {        i!=4?cout<<*(arr++)<<"," : cout<<*(arr++)<<endl;     }     arr=a;     cout<<canArrangeWorld2(5,arr)<<endl;     return 0; } 20分钟还没来得及修改,时间就到了。之后自己的代码实现是这样的,通过了自己的测试,包含大写和小写混合,希望各位给出指导意见。
点赞 回复 分享
发布于 2017-08-25 09:14
C++版,欢迎大家找错 int canArrangeWords(int num,char** arr){ for(int i=0;i<num;++i){ bool visited[num]={false}; char head[100]={'0'};//保证拷贝成功 strcpy(head,arr[i]); visited[i]=true; //cout<<head[strlen(head)-1]<<endl; int count=0; int temp=num-1; while(temp--){ for(int j=0;j<num;++j){ if(head[strlen(head)-1]==arr[j][0]&&visited[j]!=true){ strcpy(head,arr[j]); visited[j]=true; count+=1; } } if(count==num-1){ break; } } if(count==num-1){ return 1; } } return -1; }
点赞 回复 分享
发布于 2017-08-24 21:05
1楼的思路,Java实现: int result(String[] arr) { char c1 = 0; char c2 = 0; for (int i = 0; i < arr.length - 1; i++) { c1 = arr[i].charAt(arr[i].length() - 1); c2 = arr[i + 1].charAt(0); if (c1 != c2) { return 0; } } return 1; }
点赞 回复 分享
发布于 2017-08-24 17:45
int test(vector<string>data) {     for(int i=0;i<(data.size()-1);i++){              string tem1;         string tem2;         tem1 = data.at(i);         tem2 = data.at(i+1);                  if(tem1.at(tem1.size() - 1) != tem2.at(0)){                      return 0;         }     }     return 1; }
点赞 回复 分享
发布于 2018-08-27 21:11
可以看看这个,测试全部通过http://blog.csdn.net/yf_li123/article/details/77512204
点赞 回复 分享
发布于 2017-08-25 18:19
package 中兴; import java.util.*; /**  * Created by lenovo on 2017/8/24.  */ public class GoodArray {     public static void main(String[] args){         Scanner scanner=new Scanner(System.in);         String string=scanner.nextLine();         String[] strings=string.split(" ");         ArrayList<LinkedList<String>> linkedLists=new ArrayList<LinkedList<String>>();         linkedLists = Permutation(strings);         System.out.println(linkedLists.toString());         for (LinkedList list:linkedLists){             String[] d=new String[list.size()];             for (int i=0;i<list.size();i++){                 d[i]= (String) list.get(i);             }             if (check(d)){                 System.out.println("1");                 return;             }         }         System.out.println("0");     }     public static boolean check(String[] array){         for (int i=1;i<array.length;i++){             char a=array[i-1].charAt(array[i-1].length()-1);             char b=array[i].charAt(0);             if (a==b){                 continue;             }else {                 return false;             }         }         return true;     }     public static ArrayList<LinkedList<String>> Permutation(String[] str) {         //   HashSet<String> set=new HashSet<String>();         ArrayList<LinkedList<String>> list=new ArrayList<LinkedList<String>>();         if(str==null||str.length>9)             return list;         list=Permutation(str,0,list);         //       Iterator iterator=set.iterator(); //        while (iterator.hasNext()){ //            list.add((String) iterator.next()); //        }         //list.contains()         return list;     }     public static ArrayList<LinkedList<String>> Permutation(String[] chars, int beg, ArrayList<LinkedList<String>> list){         //ArrayList<String> list=new ArrayList<String>();         if(beg==chars.length-1){             LinkedList<String> linkedList=new LinkedList<String>();             for(int i=0;i<chars.length;i++){                 linkedList.add(chars[i]);             }             //list.add(s);             if (!list.contains(linkedList)){                 list.add(linkedList);             }         }else{             for(int i=beg;i<chars.length;i++){                String t=chars[beg];                 chars[beg]=chars[i];                 chars[i]=t;                 Permutation(chars,beg+1,list);                 t=chars[beg];                 chars[beg]=chars[i];                 chars[i]=t;             }         }         return list;     } }
点赞 回复 分享
发布于 2017-08-24 22:50
通过率3/5=60%,不知道什么原因啊
点赞 回复 分享
发布于 2017-08-24 20:12
问一下这个模拟题是在哪儿找的呢?
点赞 回复 分享
发布于 2017-08-24 19:25
java版本的: package com.string; import java.util.ArrayList; import java.util.Scanner; public class MyString { public static void main(String[] args) { Scanner in=new Scanner(System.in); int num=in.nextInt(); String[] aStrings=new String[num]; for (int i = 0; i < num; i++) { aStrings[i]=in.next(); } in.close(); System.out.println(isGood(aStrings)); } public static int isGood(String[] arg) { ArrayList<String> list=new ArrayList<String>(); int num=arg.length; //System.out.println(num); if (num<=1) { return -1; } int number=0; for (int i = 0; i < num; i++) { char[] c=arg[i].toCharArray(); int n=c.length; String str1=String.valueOf(c[0]); String str2=String.valueOf(c[n-1]); list.add(str1); list.add(str2); } //// for(int i=0;i<list.size();i++) //// { //// System.out.print(list.get(i)); //// //// } // System.out.println(); for(int i=0;i<(list.size()/2-1);i++) { if (list.get(2*i+1).equals(list.get(2*i+2))) { number+=1; } } if (number==num-1) { return 1; }else return -1; } }
点赞 回复 分享
发布于 2017-08-24 18:44
能用python写不
点赞 回复 分享
发布于 2017-08-24 16:45
这个不是记一下上一个字符串的尾,尾=字符串[strlen(字符串)-1] 与当前遍历的字符串头比就可以么?不同直接return -1了 
点赞 回复 分享
发布于 2017-08-24 16:13
package cc.open; import java.util.*; public class test4 { public static void main(String[] args) {          int number = gethaha(11);         System.out.println(number); } public static int gethaha(int n){ int[] arr = new int[15]; int b=0; int sum=0; for(int i=1;i<n;i++){ if((n%i)==0){ arr[b++]=i; } } for(int j=0;j<arr.length;j++){ sum=sum+arr[j]; } if(sum==n){ return 1; } else{ return 0; } } } 第二个一起给你吧
点赞 回复 分享
发布于 2017-08-24 15:53
C++中string取第一个元素和最后一个元素不是很简单吗? 你如果用c的话,相当于一个二位字符数组,通过\0来判断字符串的结尾不就行了吗
点赞 回复 分享
发布于 2017-08-24 11:23
你的思路是基于给你的字符串已经是首尾相连的了 如果调换个顺序:["exy","abegc","cef","fnmde"],你的思路就不成立了
点赞 回复 分享
发布于 2017-08-24 11:06
只会Java,感觉这道题用java做很简单
点赞 回复 分享
发布于 2017-08-24 11:02

相关推荐

你背过凌晨4点的八股文么:简历挂了的话会是流程终止,像我一样
点赞 评论 收藏
分享
评论
点赞
32
分享

创作者周榜

更多
牛客网
牛客企业服务