导航:首页 > 源码编译 > 取数的算法

取数的算法

发布时间:2022-08-17 01:20:51

Ⅰ 怎么用算法1234个十百千位上的数字取出来

package test;

public class Tester
{
public static void main ( String[] args )
{
int num = 1234;
String temp = num + "";
String reg = "(\\d)(\\d)(\\d)(\\d)";
int q = Integer.parseInt (temp.replaceAll (reg, "$1"));
int b = Integer.parseInt (temp.replaceAll (reg, "$2"));
int s = Integer.parseInt (temp.replaceAll (reg, "$3"));
int g = Integer.parseInt (temp.replaceAll (reg, "$4"));
System.out.println ("" + q + b + s + g);
}
}

Ⅱ 算法,集合取数计算

这是一个比较典型的01背包问题,可以用动态规划的方法来解决。
首先,对问题进行一点小小的变形,即将K看做背包容量v,而每一个集合中的数字,看作一件物品,它的重量c和价值w均为其数值本身。
然后,用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
至此,即可编写程序依照上面的状态转移方程对f[N][K]进行求解了。
如果要对求解的过程进行优化,可以参考01背包问题的具体讲解,网上有很多,这里就不多介绍了。

Ⅲ 数列取数问题,感觉可以用动态规划做,求具体思路,最好的O(n)的时间算法

你这题目有问题。 又没有说取出几个数来。
按你的例子,应该取出5,1,3出来,和=9,而不是8

Ⅳ 有2个人轮流取2n个数中的n个数,取数之和大者为胜。请编写算法,让先取数者胜

先取者,每次取剩余数最大的,后取者无论怎么取,先取者所取数之和必大于后反者,必胜。

#include<stdio.h>

#define max 100

int main()

{

int i,j,a[max],left=0,right=0;

for(i=0;i<max;i++)

{

scanf("%d",&a[i]);

if(getchar()==' ') //输入完成后直接按‘ENTER’键就好,不要按空格后在按。换行符只能用' '来表示,'13'很让人费解.

shu break;

}

if(i%2==1)

{

for(j=0;j<i;j=j+2)

left+=a[j];

for(j=1;j<i;j=j+2)

right+=a[j];

if(left>right)

printf("first left ");

else if(left<right)

printf("first right ");

else

printf("peace!");

}

else

printf("error!输入的数字个数必须为偶数! ");

return 0;

}

(4)取数的算法扩展阅读:

{a.b}[a.b]的意义

{a.b}是指a.b的小数部分;[a.b]指a.b的整数部分,a.b={a.b}+[a.b]

若a.b ≧0,则{a.b}=0.b,[a.b]=a

若a.b ≦0,则{a.b}=1-0.b,[a.b]=a-1

axmodb+c=0

设xmodb=y转化成ay+c=0求解。

axmodb+cxmodb+d=0

设xmodb=y转化成ay+cy+d=0求解。

Ⅳ m个数里面取n个数的算法 (财富悬赏给得不多,但这是我所有了,跪求大牛帮帮忙)

输入n,m。然后输入n个数(不同的,相同的算法有点改变)求n个数中选m个的组合数!采取的是递归的方法!
#include <iostream>
using namespace std;
#define maxn 11
int n,m; //n,中选m个的组合数
int rcd[maxn];
int num[maxn];
void init1()
{
int i,j,val;
for (i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
}
void perm(int l,int p)
{
int i;
if(l==m)
{
for(i=0;i<l;i++)
{
printf("%d",rcd[i]);
if(i<l-1)
printf(" ");
}
printf("\n");
}
for(i=p;i<n;i++)
{
rcd[l]=num[i]; //在l的位置放上该数
perm(l+1,i+1);

}
}//perm

int main()
{
scanf("%d",&n);
scanf("%d",&m);
init1();
perm(0,0);
}

Ⅵ C语言中float型数据怎么 取整数部分算法 或取小数部分

分析如下:

一种简单的办法是直接强制转换到int型就是整数部分。减去这个int型就是小数部分了。

代码如下:

float n=12.223;
int x=(int)n;
float y=n-(float)x;

得出的x为数据的整数部分,y为数据的小数部分。

拓展资料

浮点型数据类型,FLOAT 数据类型用于存储单精度浮点数或双精度浮点数。浮点数使用IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 excess-127 二进制指数和一个 23 位尾数。尾数表示一个介于 1.0 和 2.0 之间的数。由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。此表示形式为 float 类型提供了一个大约在-3.4E+38 和 3.4E+38 之间的范围。

(资料来源:网络:FLOAT)

Ⅶ JAVA算法题目:int数组内取数相加凑数

首先观察数组可以排除几个数:588,4375,5184 因为他们如何相加也不会以0结尾。限于篇幅,部分代码如下,剩余的循环可以自己添加下,采用穷举法:
public class DoMain {

public void doit(){
int[] a = new int[] { 460, 720, 1250, 1800, 2200, 3080, 4100,
6510, 6900, 9000 };
for(int i1=0;i1<a.length;i1++){
for(int i2=i1+1;i2<a.length;i2++){
if(a[i1]+a[i2]==13750){
System.out.println(a[i1]+";"+a[i2]);
}
for(int i3=i2+1;i3<a.length;i3++){
if(a[i1]+a[i2]+a[i3]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]);
}
for(int i4=i3+1;i4<a.length;i4++){
if(a[i1]+a[i2]+a[i3]+a[i4]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]);
}
for(int i5=i4+1;i5<a.length;i5++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]);
}
for(int i6=i5+1;i6<a.length;i6++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]+a[i6]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]+";"+a[i6]);
}
for(int i7=i6+1;i7<a.length;i7++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]+a[i6]+a[i7]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]+";"+a[i6]+";"+a[i7]);
}

}
}
}
}
}
}
}

}

public static void main(String[] args) {
DoMain main= new DoMain();
main.doit();
}}

Ⅷ 将自然数1至100按顺时针围成一圈,首先取出1,然后顺时针方向按步长L=30取数(已取出的数不再参加计数),

这其实就是一个约瑟夫环问题,你网络一下就知道了
类似于已知100个人(以编号1,2,3...100分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到30的那个人出列;他的下一个人又从1开始报数,数到30的那个人又出列;依此规律重复下去,直到圆桌周围只剩下一个人,求这个人的编号。
数组实现
#include<iostream.h>
int main()
{
const int n=100;
int m=30;
int a[n];

for(int j=0;j<n;j++)
a[j]=j+1;
int k=1;
int i=-1;

while(1)
{

for(int j=0;j<m;)
{
i=(i+1)%n;
if(a[i]!=0)
j++;
}
if(k==n)
break;
a[i]=0;
k++;
}
cout<<a[i]<<endl;
return 0;
}

(用单向链表,双向链表实现见我的空间)

阅读全文

与取数的算法相关的资料

热点内容
安卓固件怎么更新 浏览:168
单片机代码例程网站 浏览:922
UG编程如何多平面轮廓2D倒角 浏览:438
视频压缩渐变纹 浏览:852
什么app能看财经新闻 浏览:40
数学奇迹神奇运算法 浏览:360
大厂的程序员的水平如何 浏览:701
遗传算法入门经典书籍 浏览:879
源码炮台脚本 浏览:621
在位编辑命令 浏览:348
曲式分析基础教程pdf 浏览:15
php生成静态html页面 浏览:965
怎么分割pdf 浏览:813
压缩垃圾报警器 浏览:629
小公司一般都用什么服务器 浏览:968
java获取时间gmt时间 浏览:821
为什么csgo一直连接不到服务器 浏览:504
安卓登ins需要什么 浏览:837
机器人算法的难点 浏览:227
全自动化编程 浏览:728