软测
1.身份验证
#include<iostream>
using namespace std;
char s[20];
int num[20]={0,7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,0,0};
int sum=0;
char last[11]={'1','0','X', '9', '8', '7', '6', '5', '4', '3', '2'};
int res=0;
int main()
{
for(int i=1;i<=18;i++)
{
cin>>s[i];
}
for(int i=1;i<=17;i++)
{
sum=(s[i]-'0')*num[i]+sum;
}
res=sum%11;
if(s[18]==last[res])
{
cout<<"The check code is Right!"<<endl;
}
else{
cout<<"The check code is Wrong!"<<endl;
}
}
2.蚂蚁
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int t;
int res=0;
cin>>t;
for(int i=0;i<t;i++)
{
stack<int> s;
int A;
int B;
int N;
int num=0;
cin>>N;
for(int i=0;i<N;i++)
{
cin>>A;
cin>>B;
if(B==1)
{
s.push(A);
}
if(B==0)
{
while(!s.empty() && A>s.top())
{
num++;
s.pop();
}
if(!s.empty())
num++;
}
}
res=N-num;
cout<<res<<endl;
}
}
3.敲代码
#include<iostream>
using namespace std;
int main()
{
int n,k,t;
while(cin>>n>>k)
{
if(n==0 &&k==0)
break;
int v=1.0*n*(k-1)/k;
while(true)
{
int sum=0;
t=v;
while(t>0)
{
sum=sum+t;
t=t/k;
}
if(sum>=n)
break;
v++;
}
cout<<v<<endl;
}
}
4.走哪了
#include<iostream>
#include<string>
using namespace std;
int main()
{
int T;
cin>>T;
for(int i=0;i<T;i++)
{
int n;
int a[101]={0};
cin>>n;
string step;
string as;
int k;
int sum=0;
for(int i=1;i<=n;i++)
{
cin>>step;
if(step[0]=='L')
a[i]=-1;
else if(step[0]=='R')
a[i]=1;
else
{
cin>>as>>k;
a[i]=a[k];
}
sum=sum+a[i];
}
cout<<sum<<endl;
}
}
5.连续串
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <vector>
using namespace std;
int a[11][3]; //a[i][j]的定义已给出
//a[n][2] 为最终输出
int main(){
int n;
cin >> n;
//a数组初始化,只需要n=3的状态
a[3][0] = 900;
a[3][1] = 90;
a[3][2] = 10;
if(n==3)
cout << a[3][2];
else {
for(int i=4; i<=n; i++){
a[i][0] = (pow(10,i-1)- a[i-1][2])*9;
a[i][1] = a[i-1][0];
a[i][2] = a[i-1][1] + a[i-1][2] * 10;
}
cout <<a[n][2];
}
return 0;
}
6.最长不相邻字符串
#include<iostream>
#include<vector>
using namespace std;
const int MM = 1e5+5;
int parent[MM];
int ans=1;
int dfs(vector<vector<int> >& g,string& s ,int cur){
int a =0;
int b =0;
for(int i=0;i<g[cur].size();i++){
int c= dfs(g,s,g[cur][i]);
if(s[g[cur][i]]==s[cur])
continue;
// 符合条件的最大孩子路径长度
if(c>a){
b=a;
a=c;
}else if(c>b){
b=c;
}
}
// 最大值和返回值并不相同,当前结点的返回值是最长孩子和本身
// 最大值是以当前结点为根的最长路径,包括两个最长孩子和本身
ans = max(ans,b+a+1);
return a+1;
}
int main()
{
int n;
cin >> n;
for(int i=0; i<n; i++){
cin>>parent[i];
}
string s;
cin >> s;
vector<vector<int> > g(n);
for(int i=1;i<n;i++){
g[parent[i]].push_back(i);
}
dfs(g,s,0);
cout<<ans<<endl;
}
7.k=n!/m!
#include <bits/stdc++.h>
using namespace std;
int main(){
int k;
int cnt = 1; //用来输出计数
while (scanf("%d",&k)!=EOF)
{
if(k==1)
{
cout<<"Case "<<cnt<<": Impossible" <<endl;
cnt++;
continue;
}
int slow = 1;
int fast = 1;
int result = 1;
vector<int> v;
for(int i=0; i<=k; i++)
v.push_back(i);
//遍历滑动窗口
for(fast=2; fast<=k; fast++){
result *= v[fast];
if(result == k) {
cout <<"Case "<<cnt<<":"<<fast<<" "<<slow<<endl;
cnt++;
break;
}
else if(result < k){ //窗口太小,向右扩大
continue;
}
else{
while(result>k){
slow++;
result /= v[slow];
}
// 当 result <=k时
if(result == k) {
cout <<"Case "<<cnt<<":"<<fast<<" "<<slow<<endl;
cnt++;
break;
}
else if(result < k)
continue;
}
}
}
return 0;
}
8.完全平方数
#include<iostream>
#include<cmath>
using namespace std;
int a,b,c,d;
bool check(int x)
{
int t=sqrt(x);
if(t*t==x)
return true;
else
return false;
}
int main()
{
int T;
cin>>T;
while(T--)
{
int m;
cin>>m;
int sum=0;
a=m%10;
b=(m/10)%10;
c=(m/100)%10;
d=m/1000;
for(int j=1;j<=9;j++)
{
for(int k=1;k<=9;k++)
{
for(int l=1;l<=9;l++)
{
for(int n=1;n<=9;n++)
{
int f=0;
if(a==n)
f++;
if(b==l)
f++;
if(c==k)
f++;
if(d==j)
f++;
if(f==3)//保持有三个数相同
{
if(check(j*1000+k*100+l*10+n))
sum++;
}
}
}
}
}
cout<<sum;
}
}
9.弱数据
#include<iostream>
using namespace std;
int a[510][510];
int count[510][510];
int row[510];
int cow[510];
int main()
{
int n,m;
int i,j;
int max_row=0;
int max_cow=0;
int sum_row=0;
int sum_cow=0;
int count_row=0;
int count_cow=0;
int max_row_index=0;
int max_cow_index=0;
cin>>n>>m;
for( i=1;i<=n;i++)//每行的最大值
{
for( j=1;j<=m;j++)
{
cin>>a[i][j];
sum_row=a[i][j]+sum_row;
}
if(sum_row>max_row)
{
max_row=sum_row;
max_row_index=i;
}
sum_row=0;
}
sum_row=0;
for( i=1;i<=n;i++)//每列的最大值
{
for( j=1;j<=m;j++)
{
sum_cow=a[j][i]+sum_cow;
sum_row=a[i][j]+sum_row;
}
if(sum_cow>max_cow)
{
max_cow=sum_cow;
max_cow_index=i;
}
row[i]=sum_row;
cow[i]=sum_cow;
sum_cow=0;
sum_row=0;
}
int max=0;
int index_i=0;
int index_j=0;
for( i=1;i<=n;i++)//每行+每列存放到数组里
{
for( j=1;j<=m;j++)
{
count[i][j]=row[i]+cow[j]-a[i][j];
if(max<count[i][j])
{
max=count[i][j];
index_i=i;
index_j=j;
}
}
}
if(max_row_index==index_i && max_cow_index==index_j)
cout<<"Weak"<<endl;
else
cout<<"Strong"<<endl;
}
10.酷的数
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int a[100];
int main()
{
int n;
cin>>n;
int sum=0;
while(n--)
{
string s;
cin>>s;
bool flag=true;
sort(s.begin(),s.end());
if(s.length()==1)
flag=false;
for(int i=0;i<s.length();i++)//用ascii表示下标
{
a[int (s[i]-'0')]++;
}
sort(a,a+100);
for(int i=99;a[i-1]>0;i--)
{
if(a[i-1]==a[i])
{
flag=false;
}
}
if(flag)
sum++;
flag=true;
for(int i=0;i<100;i++)
{
a[i]=0;
}
}
cout<<sum<<endl;
}
11.换汽水
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin>>n){
if(n == 0 )break;
int a,b;
int result = 0;
while(n >= 3){
a = n/3;
b = n%3;
result += a;
n = a+b;
}
if( n ==2) result += 1;
printf("%d",result);
}
return 0;
}