21.题目链接:Sine之舞
代码:
#include<bits/stdc++.h>
using namespace std;
void an(int n)
{
int i;
for(i=1;i<=n;i++)
{
cout<<"sin("<<i;
if(i!=n&&i%2)
{
cout<<"-";
}
}
for(i=1;i<=n;i++)
{
cout<<")";
}
}
void sn(int n)
{
int i;
for(i=1;i<n;i++)
{
cout<<"(";
}
for(i=1;i<=n;i++)
{
an(i);
cout<<"+"<<n-i+1;
if(i-n)
{
cout<<")";
}
}
}
int main()
{
int n;
cin>>n;
sn(n);
return 0;
}
22.题目链接:FJ的字符串
代码:
//递归
#include<bits/stdc++.h>
using namespace std;
void func(int n)
{
if(n==1)
cout<<"A";
else
{
func(n-1);//前半部分
printf("%c",'A'+n-1);
func(n-1);//后半部分
}
}
int main()
{
int n;
cin>>n;
func(n);
return 0;
}
23.题目链接:芯片测试
代码:
//当一个芯片测试结果为好的次数大于测试结果为坏的次数时,即为好的芯片
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a[20][20];
cin>>n;
for(int i=1;i<=n;i++)
a[0][i]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[j][i]==1)
a[0][i]++;
int t=n/2;
for(int i=1;i<=n;i++)
if(a[0][i]>t)
cout<<i<<" ";
return 0;
}
24.题目链接:龟兔赛跑预测
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int v1,v2,t,s,l;
cin>>v1>>v2>>t>>s>>l;
int xr=0,xt=0,tr=0,tt=0;
//兔子路程,乌龟路程,兔子时间,乌龟时间
while(xr<l&&xt<l)//均未到达终点
{
if(xr-xt>=t)// 兔子领先t米,休息
{
tt+=s;
xt=tt*v2;
xr=tr*v1;
}
else//正常情况
{
tr++;
tt++;
xr=v1*tr;
xt=v2*tt;
}
}
if(xr==xt)//同时
{
cout<<"D"<<endl;
cout<<tt<<endl;
}
else if(xr>xt)//兔子领先
{
cout<<"R"<<endl;
cout<<tt<<endl;
}
else//乌龟领先
{
cout<<"T"<<endl;
cout<<l/v2<<endl;
}
return 0;
}
25.题目链接:回形取数
代码:
//走的路线是下右上左
//走过了就设个标记,再遇到就换方向
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
int a[m][n];
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
int sum=m*n;
i=-1;
j=0;
while(sum)
{
//向下走
while(a[++i][j]!=-1&&i<m)
{
cout<<a[i][j]<<" ";
a[i][j]=-1;
sum--;
}
i--;
//向右走
while(a[i][++j]!=-1&&j<n)
{
cout<<a[i][j]<<" ";
a[i][j]=-1;
sum--;
}
j--;
//向上走
while(a[--i][j]!=-1&&i>=0)
{
cout<<a[i][j]<<" ";
a[i][j]=-1;
sum--;
}
i++;
//向左走
while(a[i][--j]!=-1&&j>=0)
{
cout<<a[i][j]<<" ";
a[i][j]=-1;
sum--;
}
j++;
}
return 0;
}
26.题目链接:报时助手
代码:
//switch || 数组
#include<bits/stdc++.h>
using namespace std;
string n[100]={"zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven",
"twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty",
"thirty","forty","fifty"};
void ass(int num)
{
int a=num/10;
int b=num%10;
if(num<=20)
{
cout<<n[num];
}
else
{
cout<<n[a+18];
if(b!=0)
{
cout<<" "<<n[b];
}
}
}
void time_ass(int hour,int minu)
{
if(minu==0)
{
ass(hour);
cout<<" o'clock"<<endl;
}
else
{
ass(hour);
cout<<" ";
ass(minu);
cout<<endl;
}
}
int main()
{
int h,m;
cin>>h>>m;
time_ass(h,m);
return 0;
}
27.题目链接:2n皇后问题
代码:
//搜索算法
#include<bits/stdc++.h>
using namespace std;
int cb[8][8];
int n;
int sum;
int judge(int deep,int place,int kind)
{
int i,j;
if(cb[deep][place]!=1)
return 0;
for(i=0;i<deep;i++)
for(j=0;j<n;j++)
{
if(cb[i][j]==kind)
{
if(j==place)
return 0;
if(abs(deep-i)==abs(place-j))
return 0;
}
}
return 1;
}
void dfs(int deep,int kind)
{
if(deep==n&&kind==2)
dfs(0,3);
if(deep==n&&kind==3)
sum++;
int i;
for(i=0;i<n;i++)
{
if(judge(deep,i,kind)==1)
{
cb[deep][i]=kind;
dfs(deep+1,kind);
cb[deep][i]=1;
}
}
}
int main()
{
int i,j;
cin>>n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>cb[i][j];
dfs(0,2);
cout<<sum;
return 0;
}
28.题目链接:Huffuman树
代码:
//思路是:首先把得到的数组进行排序(这里使用插入法排序)
//然后用s存放最小的两个数字之和(即为费用Pa+Pb)
//在数组元素第二小的地址上存放最小两数值和
//最小一位清零,循环结束时s即为最终费用
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i,t,tt,j,x=0,s=0;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",a+i);
}
for(t=0;t<n-1;t++)
{
for(i=1;i<n;i++)
{//给数组从小到大排序 (插入法)
tt=a[i];
for(j=i;tt<a[j-1];j--)
{
a[j]=a[j-1];
}
a[j]=tt;
}
s+=a[x]+a[x+1];//s为最小两位之和
a[x+1]+=a[x];//第二小的位置上存放最小两数之和
a[x]=0;// 最小一位清零
x++;
}
cout<<s;
return 0;
}
29.题目链接:高精度加法
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i,alen,blen;
char a[101],b[101],c[102];
memset(c,0,sizeof(c));//清零
scanf("%s%s", a, b);
alen=strlen(a);
blen=strlen(b);
for(i=0;i<alen||i<blen;i++)
{
if(i<alen)
c[i]+=a[alen-i-1]-'0';
if(i<blen)
c[i]+=b[blen-i-1]-'0';
if(c[i]>=10)
{
c[i+1]=c[i]/10;
c[i]%=10;
}
}
if(alen<blen)
alen=blen;
if(c[alen]>0)
printf("%d", c[alen]);
for(i=alen-1;i>=0;i--)
printf("%d", c[i]);
return 0;
}
30.题目链接:阶乘计算
代码:
//高精度
#include <bits/stdc++.h>
using namespace std;
#define MAX 4000
int main()
{
int n,a[MAX],i,j,s,r=0;
cin>>n;
memset(a,0,sizeof(a));
a[0]=1;
for(i=2;i<=n;i++)
{
for(j=0;j<MAX;j++)
{
s=a[j]*i+r;
r=s/10;//进位
a[j]=s%10;
}
}
for(i=MAX-1;i>=0;i--)
{
if(a[i])
break;
}
for(j=i;j>=0;j--)//倒序输出
cout<<a[j];
return 0;
}