53 条回复
前端编程题中的酒店评分,下面代码思路基本正确,但是只通过了20%,不知道哪里没有处理好,可以帮忙看看吗?
#include<iostream> #include <algorithm> using namespace std; typedef struct Hotel { int num; int min; float avage; }h; h hotel[10000]; bool cmpare(const h &a, const h &b){ if(a.min > b.min){ //最低星级比较高的 return true; }else if(a.min == b.min){ //最低星级相等 if(a.avage > b.avage) { //平均星级较高 return true; }else if(a.avage == b.avage){ //平均星级相等 return a.num < b.num; } else{ //平均星级较低 return false; } }else{ //最低星级比较低 return false; } return false; } int main(){ int n; cin>>n; for(int i=0;i<n;i++){ int sum = 0; int min = 5; int tmp; for(int i=0;i<5;i++){ cin>>tmp; sum += tmp; if(min > tmp){ min = tmp; } } h htmp; htmp.num = i; htmp.min = min; htmp.avage = (float)sum / 5; hotel[i] = htmp; } sort(hotel,hotel+n,cmpare); for(int i=0;i<n;i++){ cout<<hotel[i].num<<" "; } return 0; }
酒店第二道题只能跑20%,求解,以下是code
var count = +read_line(); var account = []; for (var i = 0; i < count; i++) { var item = read_line().split(' '); // int item.forEach(function (ele, ind) { item[ind] = +ele; }); var min = Math.min.apply(null, item); var sum = 0; var j, len = item.length; for (j = 0; j < len; j++) { sum += +(item[j]); } var avg = (sum / count).toFixed(4); var obj = {}; obj.index = i; obj.min = min; obj.avg = +avg; account.push(obj); } account.sort(function (a, b) { var aMin = a['min'], bMin = b['min']; var aAvg = a['avg'], bAvg = b['avg']; var aIndex = a['index'], bIndex = b['index']; // console.log(account); if (aMin !== bMin) { return bMin - aMin; } else { if (aAvg !== bAvg) { return bAvg - aAvg; } else { return aIndex - bIndex; } } }); var finalArr = []; account.forEach(function (ele) { finalArr.push(ele.index); }); print(finalArr.join(' '));
粗心大意害死人啊,交卷半小时,改对两道题……
第一题一开始还写了个堆,写了一半才想起空间会爆炸,耽误了好久- -
1. #include<stdio.h> #include<stdlib.h> #define LEFT 0 #define RIGHT 1 struct Node{ struct Node* left = NULL; struct Node* right = NULL; int value; }; typedef struct Node BinTree; int preorder[1001] = { 0 }; int inorder[1001] = { 0 }; struct Node* AddNode(struct Node* node, struct Node* root, int pos) { if (pos == LEFT) root->left = node; if (pos == RIGHT) root->right = node; return node; } struct Node* ConstructBinTree(int* preorder, int* inorder, int size) { int i; struct Node* root = (struct Node*)malloc(sizeof(struct Node)); root->left = NULL; root->right = NULL; root->value = preorder[0]; if (size == 1) return root; for (i = 0; i < size; i++) { if (inorder[i] == preorder[0]) break; } if (i>0 && *(preorder + 1) != 0) //这两个地方没考虑 AddNode(ConstructBinTree(preorder + 1, inorder, i), root, LEFT); if (i<size - 1 && *(preorder + i + 1) != 0 && *(inorder + i + 1) != 0) //这两个地方没考虑 AddNode(ConstructBinTree(preorder+i+1, inorder+i+1, size-i-1), root, RIGHT); return root; } void FloorTraverse(BinTree* tree) { int front = 0; int rear = 0; struct Node* queue[10000]; struct Node* tempNode; if (tree != NULL){ queue[rear++] = tree; while (front != rear){ tempNode = queue[front++]; if (tempNode->left != NULL) queue[rear++] = tempNode->left; if (tempNode->right != NULL) queue[rear++] = tempNode->right; printf("%d ", tempNode->value); } } } int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &preorder[i]); for (int i = 0; i < n; i++) scanf("%d", &inorder[i]); BinTree* tree = ConstructBinTree(preorder, inorder, n); FloorTraverse(tree); return 0; } 2. #include<stdio.h> #include<string.h> char num26[10000]; long long pow(long long a, long long b) { if (b == 0) return 1; if (b == 1) return a; if (b == 2) return a*a; if (b % 2) return pow(pow(a, b / 2), 2)*a; else return pow(pow(a, b / 2), 2); } int main() { long long result; while (scanf("%s", num26) != EOF) { result = 0; int length = strlen(num26); for (int i = 0; i < length; i++) result += (num26[i] - 'a')*pow(26, length - i - 1); printf("%lld\n", result); //要用lld啊…… memset(num26, 0, 10000 * sizeof(char)); } return 0; }
进制转换,测试时一直为80%,是我代码问题吗 import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); String output=""; while(sc.hasNext()){ String s = sc.nextLine(); char[] ch = s.toCharArray(); long sum=0; for(int i=0;i<ch.length;i++){ int n = ch[i]-'a'; sum=(long) (sum+n*Math.pow(26, ch.length-i-1)); } output = output + sum+" "; } String[] sp = output.split(" "); for(String st:sp){ System.out.println(st); } } }
本地测试结果没错,怎么评0%呢
# include <iostream> # include <stdio.h> # include <math.h> using namespace std; int main () { int n, m=0,i=0; char a[10]; char c; int ans=0; while(1) { do{ c=cin.get(); a[i]=c; m++; i++; }while(c!='\n'); for(i=m-2;i>=0;i--) { n=a[i]-97; ans=ans+n*pow(26,(m-2-i)); } cout<<ans<<'\n'; i=0; m=0; ans=0; getchar(); } return 0; }
第一题按层打印二叉树只对了20%,真心不懂
#include <bits/stdc++.h> using namespace std; class node{ public: int v; node *lchild; node *rchild; node(int value = 0){ v = value; lchild = NULL; rchild = NULL; } }; node* build(int a[], int as, int b[], int bs, int len){ int temp = a[as]; int i; for(i = bs; i < len; i++) if(b[i] == temp) break; node *head = new node(temp); if(i - bs >= 1) head->lchild = build(a, as + 1, b, bs, i - bs); if(len - (i - bs + 1) >= 1) head->rchild = build(a, as + i - bs + 1, b, i + 1, len - (i - bs + 1)); return head; } void printTree(node *head){ if(head == NULL) return; queue<node*> q; node *cur = head; q.push(cur); int flag = 1; while(!q.empty()){ node *p = q.front(); if(flag == 1){ cout<<p->v; flag = 0; } else cout<<" "<<p->v; q.pop(); if(p->lchild != NULL) q.push(p->lchild); if(p->rchild != NULL) q.push(p->rchild); } } int main() { int n; cin>>n; int *a = new int[n]; int *b = new int[n]; for(int i = 0; i < n; i++) cin>>a[i]; for(int i = 0; i < n; i++) cin>>b[i]; node *head; head = build(a, 0, b, 0, n); printTree(head); }
var n = ~~read_line() var dlr = read_line().split(' ').filter(function(value){ return value !== '' }) var ldr = read_line().split(' ').filter(function(value){ return value !== '' }) function Tree(l, d, r){ this.value = d this.left = l this.right = r } function getTree(_dlr, ldr){ var dlr = _dlr.slice(0) if(dlr.length === 0) return null if(dlr.length === 1) return new Tree(null, dlr.shift(), null) var d = dlr.shift() var dindex = ldr.indexOf(d) var ldlr = dlr.slice(0, dindex) var rdlr = dlr.slice(dindex) var lldr = ldr.slice(0, dindex) var rldr = ldr.slice(dindex + 1) return new Tree(getTree(ldlr,lldr), d,getTree(rdlr,rldr)) } function layer(tree){ var queue = [tree] var node, re = '' while(node = queue.shift()){ re += node.value + ' ' if(node.left) queue.push(node.left) if(node.right) queue.push(node.right) } return re.slice(0, -1) } print(layer(getTree(dlr, ldr)))
二叉树层序遍历只能过60% 完全不知道为什么 感觉没有毛病
//字符串转换那道题,就是hot dog那道 //我的代码在myeclipse环境运行没错,到了赛码网,一个数据都不通过 //希望您能看一下我的代码 import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { int result=0; Scanner sc = new Scanner(System.in); String s1 = sc.nextLine(); String s2 = sc.nextLine(); String s3 = sc.nextLine(); String[] arr=s3.split(" "); //************ char[] start=s1.toCharArray(); char[] end=s2.toCharArray(); char[][] ss=new char[arr.length][start.length]; for(int m=0;m<arr.length;m++){ ss[m]=arr[m].toCharArray(); } //*********** int start_dif=0; int[] difs=new int[arr.length]; //初始化start_dif for(int i=0;i<start.length;i++){ if(start[i]!=end[i]){ start_dif++; } } //初始化difs for(int m=0;m<arr.length;m++){ int count=0; for(int i=0;i<start.length;i++){ if(ss[m][i]!=end[i]){ count++; } } difs[m]=count; } //开始变换 while(start_dif!=0){ //先找difs[i]=start_dif-1的 ArrayList<Integer> list=new ArrayList<Integer>(); for(int i=0;i<arr.length;i++){ if(difs[i]==start_dif-1){ list.add(i); } } //**************** for(int i=0;i<list.size();i++){ int difs_star=0; for(int m=0;m<start.length;m++){ if(start[m]!=ss[list.get(i)][m]){ difs_star++; } } if(difs_star==1){//只有一处不同,让start=ss[list.get(i)] for(int n=0;n<start.length;n++){ start[n]=ss[list.get(i)][n]; } start_dif--; result++; break; } } } System.out.println(result+1); } }
基本思想就是记录每个单词与目标单词的相同位置但字母不同的个数(起始单词不同个数为start_dif,其他单词不同个数为difs[]),每次在difs[]中找到比start_dif小1的单词,并转换成这个单词。
这样既能保证每次改变一位,又能向着目标单词转换。
import java.lang.Math; import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; public class Main { public static void main(String[] args) { HashMap<Character, Integer> hashMap=new HashMap<Character, Integer>(); hashMap.put('a', 0); hashMap.put('b', 1); hashMap.put('c', 2); hashMap.put('d', 3); hashMap.put('e', 4); hashMap.put('f', 5); hashMap.put('g', 6); hashMap.put('h', 7); hashMap.put('i', 8); hashMap.put('j', 9); hashMap.put('k', 10); hashMap.put('l', 11); hashMap.put('m', 12); hashMap.put('n', 13); hashMap.put('o', 14); hashMap.put('p', 15); hashMap.put('q', 16); hashMap.put('r', 17); hashMap.put('s', 18); hashMap.put('t', 19); hashMap.put('u', 20); hashMap.put('v', 21); hashMap.put('w', 22); hashMap.put('x', 23); hashMap.put('y', 24); hashMap.put('z', 25); String s; ArrayList<Integer> list=new ArrayList<Integer>(); int t=0; String lineString; ArrayList<String> arrayList=new ArrayList<String>(); Scanner sc=new Scanner(System.in); while (!"".equals(lineString=sc.nextLine())) { arrayList.add(lineString); } for (int i = 0; i < arrayList.size(); i++) { char [] character=arrayList.get(t).toCharArray(); int baby=0; for (int i1 = 0; i1 < character.length; i1++) { int[] sum = new int [character.length]; sum[i1]=hashMap.get(character[i1]); baby=baby+(int) (sum[i1]*Math.pow(26, character.length-1-i1)); } list.add(baby); System.out.println(list.get(t)); t++; } } }
进制转换那道题ac不了求指点
添加回复