15.5.29 整数找1问题

主要思路:没有按照大家的思维去找规律,而是直接利用字符串匹配,把int转string,让程序去判断,匹配到1,计数器就加1。

PS:这是一个恶毒的算法...时间复杂度太高。n=f(n),目前算的最大n是200001。

  尝试算50000000,等了半天第一个数的f(n)都没出来...

//Powered by LZR! 字符串匹配找1
#include<iostream>
#include<string>
using namespace std;

int coute(int n)
{
    string  str;
    int i,j,clock=0;
    for(i=1;i<=n;i++)
    {
        char t[32];
        sprintf(t,"%d",i);
        str=t;
        for(j=0;j<str.length();j++)
        {
            if(str.find_first_of("1",j)==j)
            {
                clock++;
            }
        }
    }
    return clock;
}

void main()
{
    int n;
    cout<<"请输入一个正整数:"<<endl;
    cin>>n;
    cout<<"字符1,出现的次数为:"<<coute(n)<<endl;
}

时间: 2024-10-11 10:05:01

15.5.29 整数找1问题的相关文章

浙大版《C语言程序设计(第3版)》题目集 练习2-9 整数四则运算 (10 分)

练习2-9 整数四则运算 (10 分) 本题要求编写程序,计算2个正整数的和.差.积.商并输出.题目保证输入和输出全部在整型范围内. 输入格式: 输入在一行中给出2个正整数A和B. 输出格式: 在4行中按照格式"A 运算符 B = 结果"顺序输出和.差.积.商. 输入样例: 3 2 输出样例: 3 + 2 = 5 3 - 2 = 1 3 * 2 = 6 3 / 2 = 1 思路:格式化输出.代码如下: #include <stdio.h> int main() { int

10G 个整数找出中位数,内存限制为 2G

题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). 关于中位数:数据排序后,位置在最中间的数值.即将数据分 成两部分,一部分大于该数值,一部分小于该数值.中位数的位置:当样本数为奇数时,中位数=(N+1)/2 ; 当样本数为偶数时,中位数为N/2与1+N/2的均值(那么10G个数的中位数,就第5G大的数与第5G+1大的数的均值了). 分析:明显是一道

15.09.29

//比较运算符 System.out.println("1 != 0 ="+(1!=0)); System.out.println("1 > 0 ="+(1>0)); //字符串的比较 String gg = "sdsd"; String ff = "sdsd"; //逻辑运算符 int bijiao1 = 10; int bijiao2 = 0; int bijiao3 = 20; // && 短

C语言之基本算法29—整数任意次方的最后三位数(精度问题)

//精度问题! /* ================================================================== 题目: 求整数的任意次方最后三位数!347的72次方最后三位数是241. ================================================================== */ #include<stdio.h> #include<iomanip> main() { int x,y,p,n;

整数找一

一 问题说明 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数.要求:写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数.例如 f(12)  = 5.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 二 设计思路 三 代码实现 四 截图 五 总结

随机产生12个5~15之间的整数放入一位数组中,然后输出这些数,每行输出四个数

#include<stdio.h> main() { int a,i,j,n,b,s[120]; for(i=0;i<12;i++) scanf("%d",&s[i]); for(i=0;i<12;i++) {if(i%4==0) printf("\n"); printf("%d ",s[i]); } return 0; }

面试算法题:16个数,最多用20次比较,找出第二大的数?

这道题最笨的方法就是先从16个数中选出最大的数,然后再从剩下的15个数中选出最大数就可得到答案,因此,需要15+14=29次比较. 既然这道题要求在20次比较之内就能找出第二大的数,那我们就想能简单的方法. 假设16个数中最大的是A,第二大的是B. 首先将16个数两两进行比较,较大者胜出,然后再在胜出者中进行两两比较,按此方法,最后选出最大数A,如下所示 红色路线是最大数经过的路径. 接下来分析B可能存在的位置. 将16个数分为左部分和右部分各8位: 1.如果A和B在两个不同的部分(A在左部分,

Java-寻找矩阵连通域个数

给定一个矩阵,寻找连通域个数:前后左右相同为连通 ex: 0 1 0 1 0 1 1 1 0 0 1 0 0 1 0 0 输出2 利用深度搜索思路: 1 public static int getCount(int[][] A) { 2 int result = 0; 3 for (int i = 0; i < A.length; i++) { 4 for (int j = 0; j < A[0].length; j++) { 5 if (A[i][j] == 1) { 6 result++;

C语言 &#183; 第二大整数

算法提高 第二大整数 时间限制:1.0s   内存限制:512.0MB 问题描述 编写一个程序,读入一组整数(不超过20个),当用户输入0时,表示输入结束.然后程序将从这组整数中,把第二大的那个整数找出来,并把它打印出来.说明:(1)0表示输入结束,它本身并不计入这组整数中.(2)在这组整数中,既有正数,也可能有负数.(3)这组整数的个数不少于2个. 输入格式:输入只有一行,包括若干个整数,中间用空格隔开,最后一个整数为0. 输出格式:输出第二大的那个整数. 输入输出样例 样例输入 5 8 -1