后面修改一下排版。。。
1.
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
int k;
while(cin >> s >> k){
string res = s.substr(0,k);
cout << res << endl;
}
return 0;
}
2.
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
string s1,s2;
while(cin >> s1 >> s2)
{
int m = s1.size(), n = s2.size();
vector<vector<int>> dp(m+1, vector<int> (n+1,0));
for(int i = 0; i <= m; i++)
dp[i][0] = i;
for(int j = 0; j <= n; j++)
dp[0][j] = j;
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++)
{
int min1 = min(dp[i-1][j], dp[i][j-1]) + 1;
dp[i][j] = min((s1[i-1] == s2[j-1] ? 0 : 1) + dp[i-1][j-1], min1);
}
}
cout << dp[m][n] << endl;
}
return 0;
}
3.
#include <iostream>
using namespace std;
struct ListNode
{
int data;
ListNode *next;
};
int main()
{
int num ,headvalue;
while(cin >> num >> headvalue)
{
ListNode *p,*head = new ListNode;
head->data = headvalue; //先输入第一个数
head->next = NULL;
int xin;
int jiu;
num--;
while(num--) //输入剩余的书
{
cin>>xin>>jiu;
ListNode *q = new ListNode;
q->data = xin;
for(p = head; p != NULL; p = p->next)
{
if(p->data == jiu)
{
q->next = p->next;
p->next = q;
}
}
}
int shanchu;
cin >> shanchu;
if(head->data == shanchu) //要删除的是第一个节点
{
head->next = NULL;
}
for(p = head; p->next != NULL; p = p->next)
{
if(p->next->data == shanchu)
p->next = p->next->next;
}
for(p = head; p != NULL; p = p->next)
{
cout << p->data <<" ";
}
cout << endl;
}
return 0;
}
4.
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
int count = 0;
if(n < 7)
return 0;
for(int i = 7; i <= n; i++){
if(i % 7 == 0 || i % 10 == 7 || (i % 100)/10 == 7 || (i % 1000)/100 == 7 || (i % 10000)/1000 == 7)
count++;
}
cout << count <<endl;
}
return 0;
}
5.
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1, s2;
while(cin >> s1 >> s2)
{
int a ,b;
a = atoi(s1.c_str());
b = atoi(s2.c_str());
cout << a+b << endl;
}
return 0;
}
6.
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
while(cin >> s)
{
int res[128] = {0};
for(int i = 0 ; i < s.size(); i++)
{
res[s[i]]++;
}
int flag = 0;
for(int i = 0; i < s.size(); i++)
{
if(res[s[i]] == 1){
cout << s[i] << endl;
flag = 1;
break;
}
}
if(!flag){
cout << -1 << endl;
}
flag = 0;
}
return 0;
}
7.
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
string s;
int num;
while(cin >> s >> num)
{
double max_ratio = 0;
double cur_ratio = 0;
string res = "";
int count = 0;
int fir = 0, sec = num-1;
string temp = s.substr(fir,num);
while(sec < s.size()){
for(int i = 0; i < num; i++)
{
if(temp[i] == 'C' || temp[i] == 'G')
count++;
}
cur_ratio = (count*1.0)/num;
if(cur_ratio > max_ratio)
{
max_ratio = cur_ratio;
res = temp;
}
count = 0;
fir++;
sec++;
temp = s.substr(fir,num);
}
cout << res << endl;
}
return 0;
}
8.
#include<iostream>
#include<vector>
#include<string>
using namespace std;
void findMaxCommonStr(string s1,string s2)
{
if(s1.length()>s2.length())
swap(s1,s2);//s1用于保存较短的子串
int len1=s1.length(),len2=s2.length();
int maxLen=0,start=0;
vector<vector<int> >dp(len1+1,vector<int>(len2+1,0));
for(int i=1;i<=len1;++i)
for(int j=1;j<=len2;++j)
{
if(s1[i-1]==s2[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
if(dp[i][j]>maxLen)
{
maxLen=dp[i][j];
start=i-maxLen;//记录最长公共子串的起始位置
}
}
}
cout<<s1.substr(start,maxLen)<<endl;
}
int main()
{
string s1,s2;
while(cin>>s1>>s2)
{
findMaxCommonStr(s1,s2);
}
return 0;
}
9.
//搞了半天原来是可以有括号的,全排列+递归就可以了,而全排列本身又可以递归来做。
//不要忘记恢复现场就行。
#include<iostream>
using namespace std;
inline void Swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
bool is24(int a[], int begin, int end, double tot)
{
if (begin==end-1) return (a[begin] == tot);
else
{
bool ans = false;
for (int i = begin; i<end; i++)
{
swap(a[i], a[end-1]);
ans = ans || is24(a, begin, end - 1, tot + a[end - 1]) || is24(a, begin, end - 1, tot - a[end - 1]) || is24(a, begin, end - 1, tot * a[end - 1]) || is24(a, begin, end - 1, tot / a[end - 1]);
swap(a[i], a[end-1]);
}
return ans;
}
}
int main()
{
int a[4];
while (cin >> a[0] >> a[1] >> a[2]>>a[3])
{
if (is24(a, 0,4, 24)) cout << "true" << endl;
else cout << "false" << endl;
}
}
10.
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int x,y,z;
while(cin>> x >> y >> z)
{
vector<vector<int>> a(x+1,vector<int>(y+1,0));
vector<vector<int>> b(y+1,vector<int>(z+1,0));
vector<vector<int>> res(x+1,vector<int>(z+1,0));
for(int i = 1 ;i <= x; i++)
{
for(int j = 1; j <= y; j++)
cin >> a[i][j];
}
for(int i = 1 ;i <= y; i++)
{
for(int j = 1; j <= z; j++)
cin >> b[i][j];
}
for(int i = 1; i <= x; i++)
{
for(int j = 1; j <= z; j++)
{
for(int k = 1; k <= y; k++)
{
res[i][j] += a[i][k]*b[k][j];
}
}
}
for(int i = 1; i <= x; i++)
{
for(int j = 1; j <= z; j++)
{
cout << res[i][j] << " " ;
}
cout << endl;
}
}
return 0;
}
11.
#include<string>
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
int main()
{
int N;
while (cin >> N)
{
vector<vector<int>> V(N, vector<int>(2, 0));//初始化二维数组
string rule;
for (auto &i : V)
for (auto &j : i)
cin >> j;
cin >> rule;
int count = 0;
stack<char> cal;//存储表达式的字母
for (int i = 0; i < rule.size(); i++)
{
if (rule[i] == ')')
if (cal.size()!=1)
{
vector<int> temp2 = V[cal.top() - 'A'];
cal.pop();
vector<int> &temp1 = V[cal.top() - 'A'];
count += temp1[1] * temp1[0] * temp2[1];
temp1[1] = temp2[1];
}
else;
else if (rule[i] != '(')
cal.push(rule[i]);
}
cout << count << endl;
}
return 0;
}
12.
#include <iostream>
using namespace std;
int main()
{
string regex;
string str;
while(cin>>regex>>str)
{
int j=0;
int i=0;
bool flag = false;
while(str[i]!='\0'||regex[j]!='\0')
{
if(regex[j]=='*')
{
j++;
flag=true;
}
else if(str[i]==regex[j]||regex[j]=='?')
{
i++;
j++;
}
else if(flag==true)
{
while(str[i]!=regex[j])
{
i++;
}
flag = false;
}
else
{
cout<<"false"<<endl;
break;
}
}
if(str[i]=='\0'&&str[j]=='\0')
{
cout<<"true"<<endl;
}
}
return 0;
}
13.
#include<iostream>
using namespace std;
char str1[15],str2[15],str[105];
int a[15],b[15],lena,lenb;
int main(){
while(cin.getline(str,100)){
int flag=0,len1=0,len2=0;
for(int i=0;str[i]!=0;i++){
if(str[i]=='-'){
flag=1;
i++;
}
if(flag==0){
str1[len1++]=str[i];
}else{
str2[len2++]=str[i];
}
}
//拆到两个数字类型的数组里
if(len1==11){
cout<<str1<<endl;
}else if(len2==11){
cout<<str2<<endl;
}else{
lena=0,lenb=0;
//处理数组变成数字类型数组
for(int i=0;i<len1;i++){
if(str1[i]=='A'){
a[lena++]=14;
}else if(str1[i]=='J'){
a[lena++]=11;
}else if(str1[i]=='Q'){
a[lena++]=12;
}else if(str1[i]=='K'){
a[lena++]=13;
}else if(str1[i]>='0'&&str1[i]<='9'){
int tmp=0;
do{
tmp=tmp*10+str1[i]-'0';
i++;
}while(str1[i]>='0'&&str1[i]<='9');
a[lena++]=tmp;
}
}
for(int i=0;i<len2;i++){
if(str2[i]=='A'){
b[lenb++]=1;
}else if(str2[i]=='J'){
b[lenb++]=11;
}else if(str2[i]=='Q'){
b[lenb++]=12;
}else if(str2[i]=='K'){
b[lenb++]=13;
}else if(str2[i]>='0'&&str2[i]<='9'){
int tmp=0;
do{
tmp=tmp*10+str2[i]-'0';
i++;
}while(str2[i]>='0'&&str2[i]<='9');
b[lenb++]=tmp;
}
}
if(lena==lenb){
if(a[0]>b[0]){
cout<<str1<<endl;
}else{
cout<<str2<<endl;
}
}else if(lena==4){
cout<<str1<<endl;
}else if(lenb==4){
cout<<str2<<endl;
}else{
printf("ERROR\n");
}
}
}
}
14.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
string s;
while(cin >> s){
int n=s.size();vector<int> v;bool isValid=true;
int num_i=count(s.begin(),s.end(),'.');
if(num_i!=3)
cout << "NO" <<endl;
for(int i=0;i<4;i++){
int index=s.find('.');
v.push_back(stoi(s.substr(0,index)));
s=s.substr(index+1);
}
for(int i=0;i<v.size();i++){
if(v[i]<0 || v[i]>255)
isValid=false;
}
if(isValid)
cout << "YES" <<endl;
else
cout << "NO" <<endl;
}
}
15.
//检测到数字,则在数字前添加“*”,随即检测后几位,如果检测到字母或其他,则添加“*”
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
while (cin >> a)
{
for (int i = 0; i < a.size(); i++)
{
int stop = 0;
if (isdigit(a[i]))
{
a.insert(i,"*");
i++;
}
while (isdigit(a[i]))
{
stop = i + 1;
i++;
}
if (stop)
a.insert(stop, "*");
}
cout << a << endl;
}
return 0;
}
16.
#include<iostream>
using namespace std;
int main() {
int n;
while (cin >> n) {
int base = 10, count = 0;
for (int i = 0; i <= n; i++) {
if (i == base) base *= 10;
if (i*i%base == i)
count++;
}
cout << count << endl;
}
return 0;
}
17.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string st;
while (getline(cin, st))
{
int a[128] = {0}, i, j, b[128] = {0};
for (i = 0; i < st.length(); ++i)
{
a[st[i]]++;
b[st[i]]++;
}
sort(a, a + 128);
sort(st.begin(), st.end());
for (i = 127; i >= 0; --i)
{
if (a[i] == 0)break;
for (j = 0; j < st.length(); ++j)
{
if (b[st[j]] == a[i])
{
cout << st[j];
b[st[j]] = 0;
break;
}
}
}
cout << endl;
}
return 0;
}
18.
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std; //动态规划
int main(){
int N;
while(cin>>N){
vector<int> Data(N,0);
vector<int> Dp(N,1);
int ret = 0;
for(int i=0; i<N; ++i){
cin >> Data[i];
for(int j=0; j<i; j++){
if(Data[i]>Data[j])
Dp[i] = max(Dp[i],Dp[j]+1);
}
ret = max(ret,Dp[i]);
}
cout<< ret<<endl;
}
return 0;
}
19.
#include<iostream>
#include<iomanip>
//牛顿法
using namespace std;
double newton(double a){
double x = 1;
while (((x*x*x - a) >= 1e-7) || ((a - x*x*x) >= 1e-7)){
x = (x - x / 3 + a / (3 * x*x));
}
return x;
}
int main(){
double num;
while (cin >> num){
cout << setprecision(1) << fixed << newton(num) << endl;
}
return 0;
}```