计算机设计与分析(王晓东第五版)第一章编程题
第一题
#include<iostream>
using namespace std;
int main(){
int page,num[10]={0};
cin>>page;
for(int i=1;i<=page;i++){//从头到尾,计算0-9分别出现的次数
int j=i;
while(j>0){
int n=j/10;
int m=j%10;
j=n;
num[m]++;
}
}
for(int i=0;i<10;i++){
cout<<num[i]<<endl;
}
}
第二题
#include<cstring>
#include<iostream>
using namespace std;
int f(int i,int k){//获取 首字母为i,长度为k的数量
int sum=0;
if(k==1)return 1;
else{
for(int j=i+1;j<=26;j++){
sum+=f(j,k-1);
}
return sum;
}
}
int g(int k){//获取长度为k的编码数量
int sum=0;
if(k==1)return 26;
else{
for(int i=1;i<=26;i++){
sum+=f(i,k);
}
return sum;
}
}
int Num(){
int sum=0;
char word[6];
cin>>word;
int len=strlen(word);
int word_len[6];
for(int i=0;i<len;i++){//将每个字母对应的数字,存放进word_len[6]
word_len[i]=word[i]-'a'+1;
}
for(int i=len-1;i>=1;i--){//获取长度小于len的编码数量
sum+=g(i);
}
for(int i=word_len[0]-1;i>=1;i--){//获取长度为len,首字母在word_len前面的编码数量
sum+=f(i,len);
}
for(int i=1;i<=len;i++){//获取在word_len[i]-1和word_len[i-1]中间代码的数量
for(int j=word_len[i]-1;j<word_len[i-1];j++){
sum+=f(j,len-i);
}
}
sum++;
return sum;
}
int main(){
int n;
cin>>n;
int sum[n]={0};
for(int i=0;i<n;i++){
sum[i]+=Num();
}
for(int i=0;i<n;i++){
cout<<sum[i]<<endl;
}
}
第三题
#include<iostream>
using namespace std;
int main(){
int a,b;
cout<<"请输入两个正整数:";
cin>>a>>b;
int i1[b-a+1];
for(int i=0;i<b-a+1;i++){
i1[i]=a+i;
}
int num[b-a+1];
for(int i=0;i<b-a+1;i++){
num[i]=0;
for(int j=1;j<=i1[i];j++){
if(i1[i]%j==0)num[i]+=1;
}
}
int bignum=0;
for(int i=0;i<b-a+1;i++){
if(bignum<num[i])bignum=num[i];
}
cout<<bignum;
}
第四题
#include<iostream>
using namespace std;
const int N=100;
int a[N+10][N+10],b[N+10][N+10];
int T,m,n,step[N+10];
int arr(int m,int n){//输入两个数组
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>b[i][j];
}
}
}
void Flip(int k){//翻转金币
for(int i=0;i<n;i++){
a[k][i]=1-a[k][i];
}
}
bool compare(int k){//比较金币翻转面是否相同
for(int i=0;i<n;i++){
if(a[k][i]!=b[k][i]){
Flip(k);
return false;
}
}
return true;
}
void exchange(int k,int t){//交换列
for(int i=0;i<m;i++){//遍历行
int temp=a[i][t];
a[i][t]=a[i][k];
a[i][k]=temp;
}
}
int compare1(int k){//比较是否存在相同的列
for(int i=0;i<n;i++){//遍历列
for(int j=0;j<m;j++){//遍历行
if((a[j][i]!=b[j][k])||(a[j][k]!=b[j][i])) goto f1;
}
exchange(k,i);
return true;
f1:cout<<"";
}
return false;
}
int sum(int k){//计算翻转次数
step[k]=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(a[i][j]!=b[i][j]){
Flip(i);
if(!compare(i)){
if(!compare1(j)) return step[k]=-1;
}
step[k]++;
continue;
}
}
}
return step[k];
}
int main(){
cin>>T;//请输入一个数;
for(int i=0;i<T;i++){
cin>>m>>n;
arr(m,n);
sum(i);
}
for(int i=0;i<T;i++){
cout<<step[i]<<endl;
}
}
第五题
#include<iostream>
using namespace std;
int main(){
int len;
cout<<"请输入一个正整数:";
cin>>len;
cout<<"请输入len个正整数";
float f1[len];
int n=0;
cin>>f1[n++];
while(getchar()!='\n'){
cin>>f1[n++];
}
for(int i=0;i<len-1;i++){
for(int j=i+1;j<len;j++){
float temp;
if(f1[i]>f1[j]){
temp=f1[i];f1[i]=f1[j];f1[j]=temp;
}
}
}
float f2[len-1];
for(int i=0;i<len-1;i++){
f2[i]=f1[i+1]-f1[i];
}
float bignum=0;
for(int i=0;i<len-1;i++){
if(bignum<f2[i])bignum=f2[i];
}
cout<<"输出最大间隙:"<<bignum;
}