50 条题解
-
0
新手在此
这是一道纯纯的数学题依旧两种解法如下 方法一:#include<iostream> using namespace std; int main() { int a , b , c = 0; cin >> a; if (a % 2 == 0) { b = a / 2; } else { b = (a + 1) / 2; } for (int i = 1;i <= b;i++) { if ((a - i * 2) * (a - i * 2) * i > c) { c = (a - i * 2) * (a - i * 2) * i; } } cout << c; return 0; }
方法二:
#include<iostream> using namespace std; int main() { int n; cin >> n; cout << 128; return 0; }
这是真正的AC!!!
-
0
因为时间复杂度不高,仅仅O((n-1)/2)(取整),所以可以
暴力枚举!!!
两种方案: 第一种:
#include <bits/stdc++.h> using namespace std; int main(){ int n,v=-1; scanf("%d",&n); for(int i=1;i<=(n-1)/2;i++){ v=max(v,(n-i*2)*(n-i*2)*i); } printf("%d\n",v); return 0; }
第二种:
#include <cstdio> using namespace std; int main(){ printf("%d",128); return 0; }
-
0
OK呀,稍微把自己带了进去,脑子快废了。
洗了个澡,思路清晰了很多。
做这种题,就是明明题目很简单,你就是想不出解法,特难受。
long long n,a=1,num=0,biggest=0;//全局变量。 int main() { cin>>n; while (true)//直接while,不怕死循环。 { if (a*2>=n) { break; } num++;//num代表边长的数量。 a++;//边长 } long long v[num];//创建一个数组来储存体积。 for (int i=1;i<=num;i++) { v[i]=(n-i*2)*(n-i*2)*i; if (v[i]>biggest) { biggest=v[i];//找最大。 } } cout<<biggest; return 0; }
-
0
第一种:``` #include <bits/stdc++.h> using namespace std; int main() { int n, max = 0; cin >> n; for (int i = 1;i * 2 < n; i++) { if ( (n - 2 * i) * (n - 2 * i) * i > max) max = (n - 2 * i) * (n - 2 * i) * i; } cout << max; return 0; } 第二种:
#include <bits/stdc++.h> using namespace std; int main() { int n,h=0; cin>>n; for (int i=1;i2<=n;i++) { if ((n-i2)(n-i2)i>h) { h=(n-i2)(n-i2)*i; }
} cout<<h; return 0;
}
``` ```
-
0
思维好的应该很好理解,然后就是枚举法了,编程不难,我的这个应该通俗易懂一点
#include <bits/stdc++.h>//万能头 using namespace std; int main() { int n,a,s,v,max=0; cin >> n; for (int m=1;m<=n/2;m++)//此处判断条件一定注意是n/2,因为四角都减所以被剪掉部分长度会*2,不作限制底面积会变成负数 { a=n-m*2;//m*2的原因已经说过,这里求得的是底面的边长 s=a*a;//底面积 v=s*m;//体积(严格意义上应该是容积) if (v > max)//如果这次枚举的体积比最高值大 { max = v;//则设为新的最高值 } } cout << max;//输出 return 0; }
信息
- ID
- 347
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 4
- 标签
- 递交数
- 5212
- 已通过
- 2377
- 上传者