问题标题: 酷町堂:4863 4861 4905

0
0
已解决
王月
王月
资深守护
资深守护

4863:超时

#include <iostream>
#include<algorithm>
#include<string>
#include<cmath>
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize(2)
using namespace std;
string s[10010];
long long lf(int x){
    return pow(x,3);
}
int main(){
    int n;
    int m;
    double x;
    int cnt=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>m;
        for(int j=1;j<=m;j++){
            for(int k=1;k<=m;k++){
                if(lf(k)==j){
                    cout<<j<<" ";
                    cnt++;
                }
            }
        }
        cout<<endl;
        cout<<cnt;
        cout<<endl;
        cnt=0;
    }
    return 0;
}

加了火车头也没用

 

 

4861:

#include <iostream>
using namespace std;
int s(int m){
    if(m%4==0){
        if(m%10==4||m/10==4){
            cout<<m<<endl;
        }
    }
    else{
        cout<<"false"<<endl;
    }
}
int main(){
    int n,m;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>m;
        cout<<s(m);
    }
    return 0;
}

(* ̄︶ ̄)不知道哪里错了,样例都没过

 

 

4905:

啥也不会,思路都没

 

 

 

4863

 

4861

 

4905

 

 

 

谢大佬指教!


0
已采纳
王文博
王文博
缔造者之神
缔造者之神

4861错的原因是题目没读懂。

题目说的是只要有一位是4,就输出,只要能被4整除,就输出,但是你这个是不仅有一位是4,还要被4整除,这就不对了。

还有,函数返回类型不正确,应该是bool。

bool f(int m)
{
bool flag=0;
if(m%4==0) flag=1;
if(m%10==4||m/10==4) flag=1;
if(flag==1) return 1;
else return 0;
}
主函数改为:
if(f(m)) cout<<m<<endl;
else cout<<"false\n";

拓展:(拓展,这个是J2后面学的,看一下就行)

还有一种方法是字符串模拟,如果想知道也讲一下:

        int f=0,sum=0;
        for(int j=0;j<s.size();j++)
        {
            if(s[i]=='4') f=1;
            sum=sum*10+s[j]-48;
        }
        if(sum%4==0) f=1;

也是用flag判断方法。另外讲一下,这个方法通用于高达19位的庞然大数。

先遍历字符串一一判断,再把字符串变为数,再进行判断。

还有一种方法,不管多少位都可以,还比上面实现的简单一点:

4的倍数的特点:看后两位能不能整除。

所以不用提取整个数,只判断后两位就可以了!

提取后两位就简单了:

for(int j=s.size()-2;j<=s.size()-1;j++)
{
sum=sum*10+s[j]-48;
}
if(sum%4==0) f=1;

望采纳!

0
王文博
王文博
缔造者之神
缔造者之神
#include <bits/stdc++.h>
using namespace std;
int a[101][101],m,n;
int main()
{
    cin>>m>>n;
    for(int i=1;i<=m;i++)
    {
        for(int j=1;j<=n;j++) cin>>a[i][j];
    }
    for(int i=1;i<=m;i++)
    {
        swap(a[i][1],a[i][n]);
    }
    for(int i=1;i<=n;i++)
    {
        swap(a[1][i],a[m][i]);
    }
    for(int i=1;i<=m;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
}

3995

 

0
王文博
王文博
缔造者之神
缔造者之神

4863:想法不太正确

第一,火车头并不能解决所有问题,如果发现火车头+黑科技都不可以AC时,就要思考思考自己的算法是不是出了点什么问题。

算一下代码时间复杂度:O(n*m*m),已经要执行100亿次了。(加上pow函数也很费时间,总体就要执行300亿次,1亿次就会超时了)

这里用一个f函数:

void f(int x)
{
    int cnt=0;
    int i=1;
    while(1)
    {
        if(i*i*i>x) break;
        cout<<i*i*i<<" ";
        cnt++;
        i++;
    }
    cout<<endl<<cnt<<endl;
}

这个f函数的逻辑就是:不要一一判断,直接输出i的3次方,如果i的三次方大于限制,就跳出。

后面就很简单了,每次输入的时候直接f(m)就可以了。

望采纳!

我要回答