地址总线的位数决定了 CPU 可直接寻址的内存空间大小,例如地址总线为 1616 位,其最大的可寻址空间为 6464KB。如果地址总线是 3232 位,则理论上最大可寻址的内存空间为(4GB)。
一般来说,若地址总线为n位,则可寻址空间为 2^n字节。32位X86架构是指个人电脑的地址总线是32位的我们也可以根据题目条件计算64KB\times 2^{32-16}=4194304×2 ^32−16=4194304KB=4096MB约等于4GB。
include [HTML_REMOVED]
include [HTML_REMOVED]
using namespace std;
int n, ans, i, j;
string s;
char get(int i){
if (i < n)
return s[i];
else
return s[i-n];
}
int main(){
cin >> s;
n = s.size();
ans = 0;
for (i = 1; i <= n-1; i){
for (j = 0; j <= n-1; j)
if (get(i+j) < get(ans+j)){
ans = i; break;
}else if (get(i+j) > get(ans+j))
break;
}
for (j = 0; j <= n-1; j++)
cout<<get(ans+j);
cout<<endl;
}
输入:CBBADADA
这个程序实际是在暴力求解字符串的最小表示法,把这个字符串看成一个环,然后找一个从某个位置开始的长度为n的字典序最小的字符串。
include[HTML_REMOVED]
using namespace std;
const int SIZE = 100;
int x[SIZE], y[SIZE], f[SIZE];
int n, i, j, max_f, ans;
int main(){
cin>>n;
for (i = 1; i <= n; i)
cin >> x[i] >> y[i];
max_f = 0;
for (i = 1; i <= n; i){
f[i] =①;
for (j = 1; j <= n; j){
if (x[j] < x[i] && ②)
③;
}
if (④){
max_f = f[i];
⑤;
}
}
for (i = 1; i <= n; i)
cout<<f[i]<<endl;
cout<<ans<<endl;
}
f[i] 应该是第 i 个点的战斗力大小,ans 应该是战斗力最高的点的编号,max_f是战斗力最高的点的战斗力。所以第一空是赋值
第四空,要注意题目中说到,战斗力相同要取编号大的,所以应该要加等于号。
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
const int SIZE = 25;
bool used[SIZE];
int data[SIZE];
int n, m, i, j, k;
bool flag;
int main(){
cin>>n>>m;
memset(used, false, sizeof(used));
for (i = 1; i <= m; i){
data[i] = i;
used[i] = true;
}
flag = true;
while (flag){
for (i = 1; i <= m-1; i)cout<[HTML_REMOVED]= 1; i–){
②;
for (j = data[i]+1; j <= n; j)
if (!used[j]){
used[j] = true;
data[i] =③;
flag = true;
break;
}
if (flag){
for (k = i+1; k <= m; k)
for (j = 1; j <=④; j++)
if (!used[j]){
data[k] = j;
used[j] = true;
break;
}
⑤;
}
}
}
}
每次倒着找到第一个能变大的数字然后变大,接着把后面的数字直接从小到大排列,flag是标记能不能找到一个新的排列,如果找到一个排列就把后面的排列补全,第一层的循环意义是把排列中的第i位给它清零,然后跳出循环输出