网易散招的一道算法题

随机生成10个10-100的数字,确保其均值为75,写出算法?#网易#
全部评论
题目相当于要求生成10个10-100的数使得总和为750. 给个**思路,生成9个0-750的数(rand()%751即可)作为锚点,相当于把750分为了10份,这10份的每一个长度就是一个和为750的组合,然后判断这个10数组合是否满足10-100,不满足就重新生成
点赞 回复 分享
发布于 2017-04-23 11:29
public class Main { public static void main(String [] args){ int sum=750; int temp=0; for(int i=1;i<10;i++){ temp=(int) (Math.random()*100%91+10); while(sum-temp>(10-i)*100|| sum-temp<(10-i)*10){ temp=(int) (Math.random()*100%91+10); } System.out.print(temp+" "); sum-=temp; } System.out.print(sum);//第10个元素就等于sum } }
点赞 回复 分享
发布于 2017-04-23 14:25
sum-temp>(10-i-1)*100表示当前temp过小,即便之后每隔随机数都为100,其和也小于750;sum-temp<(10-i-1)*10表示当前temp过大,即便之后每隔随机数都为10,和也大于750.这两种情况都不满足,需要继续生成随机数
点赞 回复 分享
发布于 2017-04-23 14:10
//随机生成10个10-100的数字,确保其均值为75 #include <iostream> #include <vector> #include <ctime> using namespace std; int main(int argc, const char * argv[]) {     srand((unsigned)time(0));     int sum = 750;     int res=0;     vector<int> result;     int temp=0;     for (int i=0; i<10; ++i) {         temp = rand()%91 + 10;         if ((sum-temp) <= ((10-i-1)*100) && (sum-temp) >=0) {             result.push_back(temp);             sum -= temp;         }         else if ((sum-temp)<0){             temp = sum;             sum -= temp;             result.push_back(temp);         }         else{             int start = sum - ((10-i-1))*100;             int range = 100-start;             temp = rand()%(range+1) + start;             if (sum-temp<0) {                 temp = sum;             }             sum -= temp;             result.push_back(temp);         }         cout<<temp<<" ";         res += temp;     }     std::cout << res << endl;     return 0; }
点赞 回复 分享
发布于 2017-04-23 11:39

相关推荐

刘湘_passion:出国旅游?那就小心你的腰子咯
点赞 评论 收藏
分享
求面试求offer啊啊啊啊:这个在牛客不是老熟人了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务