XUJCOJ:caiming:2022级C++第21次作业 第10题

本题 由 Red 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。 严禁抄袭,侵权必究。代码仅当参考使用。 第10题 描述 N个学生去海岛游玩,只带了一个hrr牌充电宝,可以为所有学生的手机充电。第i个学生的手机具有百分之p[i]的电量,充电宝总共可以充百分之M的电量。问最多可以有几台手机的电量达到百分之百。 输入 只有一组案例。 第一行是两个整数N和M(0≤N≤100,0≤M≤10000),第二行包含N个整数p[i] (0≤p[i]≤100)表示第i台手机剩余电量的百分比。 输出 一个整数,表示最多可以充的手机台数。不要换行。 样例输入 3 10 100 99 90 样例输出 2 思路 很简单,只要将每台手机存到数组里然后再挨个减100,最后判断剩余电量M能够撑到第几台手机不小于0即可 代码[C语言] [Forlogin] #include<iostream> #include<algorithm> using namespace std; int main(){ int a[10000]={0},N,M,cnt=0; cin>>N; cin>>M; for(int i=0;i<N;i++){ cin>>a[i]; a[i]=100-a[i]; } sort(a,a+N); for(int i=0;i<N;i++){ M-=a[i]; if(M<0){ break; } cnt++; } printf("%d",cnt); }[/Forlogin]

November 8, 2022 · 1 min · Red

XUJCOJ:caiming:2022级C++第21次作业 第9题

本题 由 Red 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。 严禁抄袭,侵权必究。代码仅当参考使用。 第9题 描述 把一堆数字按照最小数—最大数—第二小数—第二大数—第三小数—第三大数…这样的规律输出所有的数字。 输入 只有一组案例。 一个正整数n,然后是n个整数。(n是偶数) 输出 把这n个整数按照最小数—最大数—第二小数—第二大数—第三小数—第三大数…这样的规律输出所有的数字。每个数字之间有一个空格,最后的数字后面没有空格和换行 样例输入 6 1 2 3 4 5 6 样例输出 1 6 2 5 3 4 思路 有两种想法,最直观的一种就是开个俩数组,数组a用来储存输入,另一个数组b用来储存将a遍历后的“一大一小”,说白点就是说得挨个比较一遍。时间复杂度为O(n^n)。这种算法对于样例数据这样小的数字还是可以接受的,缺点就在于没法承受太多组数字,每次比较完后还不能比之前的数字来得小(大),显然加大了工作量。 既然一般的方法不行,那就用二般的方法。我们可以把此次作业第1题抄过来,将数组a从小到大排完后,分别正序和倒序输出即可。这样便将时间复杂度控制在了O(n^2) 代码[C语言] [Forlogin] #include<stdio.h> #include<limits.h> int main(){ int n,min,a[10000]={0}; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=0;i<n;i++){ for(int t=i+1;t<n;t++){ if(a[i]>a[t]){ min=a[i]; a[i]=a[t]; a[t]=min; } } } for(int i=0;i<=(n/2)-1;i++){ printf("%d ",a[i]); printf("%d",a[(n-1)-i]); if(i!=(n/2)-1){ printf(" "); } } }[/Forlogin] 代码[C++] [Forlogin] #include<iostream> #include<limits.h> using namespace std; int main(){ int n,min,a[10000]={0}; cin<<n; for(int i=0;i<n;i++){ cin<<a[i]; } for(int i=0;i<n;i++){ for(int t=i+1;t<n;t++){ if(a[i]>a[t]){ min=a[i]; a[i]=a[t]; a[t]=min; } } } for(int i=0;i<=(n/2)-1;i++){ cout>>a[i]; cout>>a[(n-1)-i]); if(i!=(n/2)-1){ cout>>" "; } } }[/Forlogin] 发布用于测试小屋页面显示功能 ...

November 8, 2022 · 1 min · Red