如何计算数列和的绝对值最小

fengnetman 2009-07-26 07:50:34
加精
现有一个数组,里面包含了正数和负数,取其中n个数,要求这n个数的和的绝对值是最小的!
...全文
4585 126 打赏 收藏 转发到动态 举报
写回复
用AI写文章
126 条回复
切换为时间正序
请发表友善的回复…
发表回复
fqhlysliuyansen 2012-07-16
  • 打赏
  • 举报
回复
你太搞笑了



[Quote=引用 35 楼 的回复:]

这和求最大子数列的问题的本质是一样的,在网上找吧,一大堆的解法
[/Quote]
fqhlysliuyansen 2012-07-16
  • 打赏
  • 举报
回复
哪有这么容易 的

[Quote=引用 7 楼 的回复:]

用Dp可以,本质还是一个01背包,按照5楼的方法,分成两个集合,效率应该会更好一些,有些分治的意味!
[/Quote]
fengnetman 2009-08-03
  • 打赏
  • 举报
回复
今天结贴吧,不过有些话还是要说一下。就目前Csdn的算法版,个人觉得已大不如前,几位大牛基本也无法在算法版看到了。一个帖子发出来,也基本没几个人会参与谈论,这里的种种弊端我也就不说了。还有有些人发的贴子完全就是学生的作业贴,已完全失去了意义,哎,不说了,希望Csdn能再次活跃起来吧。
这里还是很感谢积极回帖的几位!
linren 2009-08-02
  • 打赏
  • 举报
回复
上面发错地方了(汗)……
linren 2009-08-02
  • 打赏
  • 举报
回复
刚才用10989测试了一下,发现这个数在32位(10进制)下是没有解的。测试需要的时间约为1个小时。

【程序】
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>

void int_to_big(char* a,int x,int len){
int i,c;
c=0;
memset(a,0,sizeof(char)*len);
for(i=0;i<len;i++){
if(x<10){
a[i]=x;return;
}
c=x%10;a[i]=c;x/=10;
}
}

void print_big(char* a){
int i,c;
c=0;
for(i=31;i>=0;i--){
if(a[i]!=0){
if(c==0) c=1;
printf("%d",a[i]);
}else{
if(c!=0) printf("0");
}
}
if(c==0) printf("0");
printf("\n");
}

void mask_to_msk(int mask,char* msk){
int i;
memset(msk,0,sizeof(char)*32);
for(i=0;i<32;i++){
if(mask&(1<<i)) msk[i]=1;
}
}
void msk_to_mask(int* mask,char* msk){
int i;
*mask=0;
for(i=0;i<32;i++) if(msk[i]==1) *mask|=(1<<i);
}

int init_mask(char* a,int* mask,char* msk){
int i,c;
char in[32];
memset(in,0,sizeof(in));
memset(msk,0,sizeof(char)*32);c=-1;
for(i=31;i>=0;i--){
if(a[i]!=0&&c==-1) c=i;
if(a[i]>1) break;
}
if(i==-1) return 1;
if(c+1==32) return -1;
msk[c+1]=1;
msk_to_mask(mask,msk);
return 0;
}

int is_answer(char* msk,int xx){
int i,j,lm;
int cc;
int b[8],d;
memset(b,0,sizeof(b));
for(i=31;i>=0;i--) if(msk[i]!=0) break;
lm=i+1;
if(lm%4==0) cc=lm/4;
else cc=lm/4+1;
for(i=0;i<cc;i++){
for(j=0;j<4;j++){
b[i]=b[i]*10+msk[i*4+3-j];
}
}
d=b[cc-1]%xx;
for(i=cc-2;i>=0;i--){
d=d*10000+b[i];
d=d%xx;
}
if(d==0){
return 1;
}
return 0;
}

unsigned prt;
void fun(int x){
char *pa,*msk;
int mask,k;
pa=(char*)malloc(sizeof(char)*32);
msk=(char*)malloc(sizeof(char)*32);

//把x转换成10进制表示,并存入pa中
memset(pa,0,sizeof(char)*32);
int_to_big(pa,x,32);

//初始化msk和mask
k=init_mask(pa,&mask,msk);
if(k==1){
printf("%d=>%d\n",x,x);
free(pa);free(msk);return;
}else if(k==-1){
printf("error!\n");
free(pa);free(msk);return;
}
//找答案
while(1){
if(is_answer(msk,x)){
printf("%d=>",x);
print_big(msk);
free(pa);free(msk);return;
}
mask++;prt=mask;
if(mask==-1){
printf("can not find in 32 bits!\n");break;
}
mask_to_msk(mask,msk);
}

free(pa);free(msk);
}


void mytimer(LPVOID sc){
unsigned myprt;
unsigned total=4294967295;
while(1){
Sleep(30000);
myprt=prt;
printf("test to: %.3f%%\n",100.0*myprt/(1.0*total));
GetTickCount();
}
}
int main(){
HANDLE thrd;
time_t t1,t2;
struct tm *pt;

thrd=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)mytimer,NULL,0,NULL);

time(&t1);
pt=localtime(&t1);
printf("start\t%02d:%02d:%02d\n",pt->tm_hour,pt->tm_min,pt->tm_sec);

fun(10989);
TerminateThread(thrd,NULL);

time(&t2);
pt=localtime(&t1);
printf("start\t%02d:%02d:%02d\n",pt->tm_hour,pt->tm_min,pt->tm_sec);
pt=localtime(&t2);
printf("end\t%02d:%02d:%02d\n",pt->tm_hour,pt->tm_min,pt->tm_sec);
return 0;
}


【运行结果】
start 14:25:38
test to: 0.899%
test to: 1.781%
test to: 2.665%
test to: 3.545%
test to: 4.434%
test to: 5.321%
test to: 6.204%
test to: 7.040%
test to: 7.869%
test to: 8.700%
test to: 9.526%
test to: 10.355%
test to: 11.181%
test to: 12.004%
test to: 12.830%
test to: 13.669%
test to: 14.507%
test to: 15.341%
test to: 16.178%
test to: 17.013%
test to: 17.846%
test to: 18.675%
test to: 19.508%
test to: 20.340%
test to: 21.170%
test to: 21.996%
test to: 22.827%
test to: 23.653%
test to: 24.479%
test to: 25.307%
test to: 26.149%
test to: 26.990%
test to: 27.828%
test to: 28.668%
test to: 29.509%
test to: 30.346%
test to: 31.178%
test to: 32.019%
test to: 32.857%
test to: 33.702%
test to: 34.537%
test to: 35.375%
test to: 36.209%
test to: 37.041%
test to: 37.874%
test to: 38.713%
test to: 39.549%
test to: 40.385%
test to: 41.222%
test to: 42.059%
test to: 42.893%
test to: 43.721%
test to: 44.556%
test to: 45.389%
test to: 46.222%
test to: 47.051%
test to: 47.883%
test to: 48.712%
test to: 49.535%
test to: 50.370%
test to: 51.214%
test to: 52.060%
test to: 52.904%
test to: 53.750%
test to: 54.594%
test to: 55.437%
test to: 56.275%
test to: 57.121%
test to: 57.966%
test to: 58.812%
test to: 59.652%
test to: 60.485%
test to: 61.323%
test to: 62.159%
test to: 63.000%
test to: 63.846%
test to: 64.691%
test to: 65.533%
test to: 66.376%
test to: 67.223%
test to: 68.065%
test to: 68.902%
test to: 69.743%
test to: 70.583%
test to: 71.424%
test to: 72.259%
test to: 73.095%
test to: 73.929%
test to: 74.760%
test to: 75.599%
test to: 76.442%
test to: 77.283%
test to: 78.122%
test to: 78.963%
test to: 79.803%
test to: 80.642%
test to: 81.479%
test to: 82.322%
test to: 83.161%
test to: 84.001%
test to: 84.839%
test to: 85.675%
test to: 86.509%
test to: 87.341%
test to: 88.179%
test to: 89.017%
test to: 89.855%
test to: 90.690%
test to: 91.530%
test to: 92.366%
test to: 93.197%
test to: 94.030%
test to: 94.868%
test to: 95.704%
test to: 96.538%
test to: 97.370%
test to: 98.203%
test to: 99.035%
test to: 99.869%
can not find in 32 bits!
start 14:25:38
end 15:25:13
Press any key to continue
tanwan 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 103 楼 linren 的回复:]
引用 100 楼 LeonTown 的回复:
C/C++ code
#include <vector>
using namespace std;

int g_iArr[] = //{-5,-2,-1,3,5}; //原始序列
//{-5, 4, 9, 3, 6, 1};
{
-176, 412, 437, -36, 164, -33, -393, 285,
-279, -290, 217, -325, -316, 51, -377, -195,
318, -141, -277, -18, 208, 364, 364, -453,
188, -2, -45, -343, 115, -309, -303, 240,
147, -331, 318, 383, -324, 272, -253, -36,
-419, -173…
[/Quote]
这组测试案例的最小值是1?如下
【测试用例】
int g_iArr[] = {-100,49,51,-1,2,4,-5};
GetSubArr(3, num);

【测试结果】
Min Abs Sum: 1
They are:2 4 -5
Press any key to continue
应该是0吧?-100+49+51=0
java1109 2009-07-31
  • 打赏
  • 举报
回复
mark
linren 2009-07-31
  • 打赏
  • 举报
回复
(上接118楼)

【测试数据】
-176, 412, 437, -36, 164, -33, -393, 285,
-279, -290, 217, -325, -316, 51, -377, -195,
318, -141, -277, -18, 208, 364, 364, -453,
188, -2, -45, -343, 115, -309, -303, 240,
147, -331, 318, 383, -324, 272, -253, -36,
-419, -173, -392, -213, -55, 119, -50, 1,
-96, 467, 127, 106, -221, -40, 222, 300,
143, -125, -76, 468, -13, -199, 269, -417,
-361, -487, 152, -195, -409, 119, 5, 61,
-114, -484, -438, 384, 229, -321, 106, -213,
480, -174, 113, -29, -330, -24, -312, -376,
212, -55, -287, -386, 458, 300, 103, -155,
262, 312, 80, 56, -314, 428, -132, 357,
-458, 308, -272, -233, -115, -60, -285, -454,
147, -115, 89, -397, 47, 161, -233, -249,
-60, -180, -260, 98, -232, -273, -162, 361,
255, -406, -225, 367, -481, -223, -141, -461,
-264, -106, 289, -358, 40, -231, 430, -432,
286, -253, -8, 438, -142, -80, 495, -176,
155, 267, -51, 332, -67, 275, 142, 374,
143, 39, 442, 374, 428, 398, -471, 201,
-63, 121, -45, 125, -397, -314, -64, 47,
-439, -327, 294, 316, -167, 312, -60, -112,
-35, 211, -180, 131, -245, -207, -284, 33,
-271, 486, -184, 120, -465, 179, 461, -156

【测试结果】
n=1: |SUM|=1
n=2~189: |SUM|=0
n=190: |SUM|=177 (timeout)
n=191: |SUM|=616 (timeout)
n=192: |SUM|=1069 (timeout)
n=193: |SUM|=1523 (timeout)
n=194: |SUM|=1981 (timeout)
n=195: |SUM|=2442 (timeout)
n=196: |SUM|=2907 (timeout)
n=197: |SUM|=3378
n=198: |SUM|=3859
n=199: |SUM|=4343
n=200: |SUM|=4830
linren 2009-07-31
  • 打赏
  • 举报
回复
【思路】
利用求近似解的思路优化枚举数组,这样比单纯的按绝对值排序得到的效果要好上很多

【程序】
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
/***只用替换这里*****************/
#define ASIZE 200
int a[ASIZE]={-176, 412, 437, -36, 164, -33, -393, 285,
-279, -290, 217, -325, -316, 51, -377, -195,
318, -141, -277, -18, 208, 364, 364, -453,
188, -2, -45, -343, 115, -309, -303, 240,
147, -331, 318, 383, -324, 272, -253, -36,
-419, -173, -392, -213, -55, 119, -50, 1,
-96, 467, 127, 106, -221, -40, 222, 300,
143, -125, -76, 468, -13, -199, 269, -417,
-361, -487, 152, -195, -409, 119, 5, 61,
-114, -484, -438, 384, 229, -321, 106, -213,
480, -174, 113, -29, -330, -24, -312, -376,
212, -55, -287, -386, 458, 300, 103, -155,
262, 312, 80, 56, -314, 428, -132, 357,
-458, 308, -272, -233, -115, -60, -285, -454,
147, -115, 89, -397, 47, 161, -233, -249,
-60, -180, -260, 98, -232, -273, -162, 361,
255, -406, -225, 367, -481, -223, -141, -461,
-264, -106, 289, -358, 40, -231, 430, -432,
286, -253, -8, 438, -142, -80, 495, -176,
155, 267, -51, 332, -67, 275, 142, 374,
143, 39, 442, 374, 428, 398, -471, 201,
-63, 121, -45, 125, -397, -314, -64, 47,
-439, -327, 294, 316, -167, 312, -60, -112,
-35, 211, -180, 131, -245, -207, -284, 33,
-271, 486, -184, 120, -465, 179, 461, -156};
/********************************/

int compar(const void *a,const void *b){
int *x=(int*)a;
int *y=(int*)b;
if(*x>*y) return 1;
if(*x==*y) return 0;
return -1;
}

struct level{
int *now;
int len;
};

void add(struct level *llv,int n){
int i=0;
llv->len=n;
llv->now=(int*)malloc(sizeof(int)*n);
memset((char*)(llv->now),0,sizeof(int)*n);
for(i=0;i<n;i++){
llv->now[i]=i;
}
}

void del(struct level *llv){
free(llv->now);
}

int timeout;
void mytimer(LPVOID sc){
int seconds;
seconds=(*(int*)sc)*1000;
Sleep(seconds);
timeout=0;
}

void fun(int *array,int size,int n,unsigned int seconds){
HANDLE thrd;
int i,j,k;
int x,y,u,v,o;
int z,z2;
int *a;
int *b;
int *c;
char *mask;
struct level p;
if(size<=0||size<n||n<=0){
printf("size<=0||size<n||n<=0 error!\n");return;
}

a=(int*)malloc(sizeof(int)*size);
b=(int*)malloc(sizeof(int)*n);
c=(int*)malloc(sizeof(int)*size);
mask=(char*)malloc(sizeof(char)*size);
memcpy(a,array,sizeof(int)*size);
memset(b,0,sizeof(int)*n);
memset(c,0,sizeof(int)*size);
memset((char*)&p,0,sizeof(struct level));

qsort(a,size,sizeof(int),compar);
if(a[0]>=0){
printf("array error: array need <0 number\n");
free(mask);free(c);free(b);free(a);return;
}
if(a[size-1]<=0){
printf("array error: array need >0 number\n");
free(mask);free(c);free(b);free(a);return;
}

timeout=1;
thrd=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)mytimer,(LPVOID)&seconds,0,NULL);

if(n==1){
for(i=0;i<size;i++){
if(i==0){
z=abs(a[i]);b[0]=a[0];continue;
}
z2=abs(a[i]);
if(z>z2){
z=z2;b[0]=a[i];
}
}
}
else if(n==size){
z2=0;
for(i=0;i<n;i++){
b[i]=a[i];z2+=a[i];
}
z=abs(z2);
}
else if(n<=size/2){
/**找一个近似解并且优化枚举数组***********************************/
o=1;
for(i=0;i<size;i++){
if(a[i]>=0){
y=i;break;
}
}
x=y-1;z2=0;
for(i=0;i<size;i++){
if(x>=0&&y<size){
u=a[x]+z2;
v=a[y]+z2;
if(abs(u)<abs(v)){
z2=u;
if(i==n-1){
z=abs(z2);b[i]=a[x];
}
else if(i<n-1) b[i]=a[x];
c[i]=a[x];x--;
continue;
}else{
z2=v;
if(i==n-1){
z=abs(z2);b[i]=a[y];
}
else if(i<n-1) b[i]=a[y];
c[i]=a[y];y++;
continue;
}
}
if(x>=0){
z2=a[x]+z2;
if(i==n-1){
b[i]=a[x];z=abs(z2);
}
else if(i<n-1) b[i]=a[x];
c[i]=a[x];x--;
continue;
}else{
z2=a[y]+z2;
if(i==n-1){
b[i]=a[y];z=abs(z2);
}
else if(i<n-1) b[i]=a[y];
c[i]=a[y];y++;
continue;
}
}
/***********************************找一个近似解并且优化枚举数组**/
if(z>0){
/**选择****************/
add(&p,n);
while(timeout){
z2=0;
for(i=0;i<n;i++){
z2+=c[p.now[i]];
}
z2=abs(z2);
if(z>z2){
z=z2;
for(i=0;i<n;i++) b[i]=c[p.now[i]];
if(z==0) break;
}
if(p.now[p.len-1]==size-1){
for(i=1,j=p.len-2;j>=0;j--,i++){
if((p.now[j])<(size-1-i)) break;
}
if(j<0) break;
p.now[j]++;
k=p.now[j]+1;
for(i=j+1;i<p.len;i++) p.now[i]=k++;
}else{
p.now[p.len-1]++;
}
}
/****************选择**/
}
}
else{
/**找一个近似解并且优化枚举数组***********************************/
o=1;
for(i=0;i<size;i++){
if(a[i]>=0){
y=i;break;
}
}
x=y-1;z2=0;
for(i=0;i<size;i++){
if(x>=0&&y<size){
u=a[x]+z2;
v=a[y]+z2;
if(abs(u)<abs(v)){
z2=u;
if(i==n-1){
z=abs(z2);b[i]=a[x];
}
else if(i<n-1) b[i]=a[x];
c[i]=a[x];x--;
continue;
}else{
z2=v;
if(i==n-1){
z=abs(z2);b[i]=a[y];
}
else if(i<n-1) b[i]=a[y];
c[i]=a[y];y++;
continue;
}
}
if(x>=0){
z2=a[x]+z2;
if(i==n-1){
b[i]=a[x];z=abs(z2);
}
else if(i<n-1) b[i]=a[x];
c[i]=a[x];x--;
continue;
}else{
z2=a[y]+z2;
if(i==n-1){
b[i]=a[y];z=abs(z2);
}
else if(i<n-1) b[i]=a[y];
c[i]=a[y];y++;
continue;
}
}
memset(a,0,sizeof(int)*size);
for(i=0;i<size;i++) a[i]=c[size-i-1];
/***********************************找一个近似解并且优化枚举数组**/
if(z>0){
/**排除****************/
add(&p,size-n);
while(timeout){
memset(mask,0,sizeof(char)*size);
for(i=0;i<size-n;i++) mask[p.now[i]]=1;
z2=0;
for(i=0;i<size;i++) if(mask[i]==0) z2+=a[i];
z2=abs(z2);
if(z>z2){
z=z2;j=0;
for(i=0;i<size;i++) if(mask[i]==0) b[j++]=a[i];
if(z==0) break;
}
if(p.now[p.len-1]==size-1){
for(i=1,j=p.len-2;j>=0;j--,i++){
if((p.now[j])<(size-1-i)) break;
}
if(j<0) break;
p.now[j]++;
k=p.now[j]+1;
for(i=j+1;i<p.len;i++) p.now[i]=k++;
}else{
p.now[p.len-1]++;
}
}
/**排除****************/
}
}

printf("n=%d:\n",n);
if(timeout) printf("[");
else printf("time out! the best test answer find in %d seconds is:\n[",seconds);
for(i=0;i<n-1;i++){
printf("%d, ",b[i]);
}
printf("%d], |SUM|=%d\n",b[i],z);
TerminateThread(thrd,NULL);
del(&p);free(mask);free(c);free(b);free(a);
}

void main(){
int i;
for(i=1;i<=ASIZE;i++) fun(a,ASIZE,i,10);
}

【运行结果】
大部分情况都找到最优解了,超时的只有以下几种情况:
n=190: |SUM|=177
n=191: |SUM|=616
n=192: |SUM|=1069
n=193: |SUM|=1523
n=194: |SUM|=1981
n=195: |SUM|=2442
n=196: |SUM|=2907
这些超时的答案和LeonTown所求的答案是一样的

fengnetman 2009-07-31
  • 打赏
  • 举报
回复
你的方法类似LeonTown的,看100楼的代码。这个已经发现有问题了。见103楼
现在提供一个新的想法:首先去着手求各个数之间的差值(两两之间),再根据差值来获得结果
tanwan 2009-07-31
  • 打赏
  • 举报
回复
我41楼回答的大家看看额...
1,-2,5,31,32,33,-96 这组数据我说的好象能过~~~
linren 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 113 楼 LeonTown 的回复:]
可能这道题,
不能简单的使用传统方法
[/Quote]

的确是很有可能

推荐一个很好的题:
彩票N保M缩水问题(最小集合覆盖问题)
这个问题虽然没有经过推荐不过的确是很不错
LeonTown 2009-07-31
  • 打赏
  • 举报
回复
而且,上述的错误例子,
都是答案集中在数列的两端
LeonTown 2009-07-31
  • 打赏
  • 举报
回复
可能这道题,
不能简单的使用传统方法
LeonTown 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 111 楼 linren 的回复:]
引用 107 楼 LeonTown 的回复:
如果在我的基础上,
先对数列按绝对值,做一下从小到大的排序,
会有效果吗?


还是有一些问题……
int g_iArr[] ={1,-2,5,31,32,33,-96};
GetSubArr(3, num);
Min Abs Sum: 31
They are:32 33 -96
Press any key to continue

答案是:
n=3:
[1, -2, 5], |SUM|=4
Press any key to continue
[/Quote]

那针对这个case,
把遍历顺序,改为从前向后,
呵呵。。。
linren 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 107 楼 LeonTown 的回复:]
如果在我的基础上,
先对数列按绝对值,做一下从小到大的排序,
会有效果吗?
[/Quote]
还是有一些问题……
int g_iArr[] ={1,-2,5,31,32,33,-96};
GetSubArr(3, num);
Min Abs Sum: 31
They are:32 33 -96
Press any key to continue


答案是:
n=3:
[1, -2, 5], |SUM|=4
Press any key to continue
LeonTown 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 109 楼 linren 的回复:]
引用 107 楼 LeonTown 的回复:
如果在我的基础上,
先对数列按绝对值,做一下从小到大的排序,
会有效果吗?



的确是有效果!
[/Quote]

也只是对上述两个错误的例子。
不知道,还有没有其它错误的例子。。。
linren 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 107 楼 LeonTown 的回复:]
如果在我的基础上,
先对数列按绝对值,做一下从小到大的排序,
会有效果吗?
[/Quote]

的确是有效果!
linren 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 104 楼 LeonTown 的回复:]
嗯,是有问题。
谢谢!
[/Quote]
这个算法在求近似解上的实力真的很强
如果两者能整合在一起就好了……

[Quote=引用 105 楼 fengnetman 的回复:]
确实,向前取最小的时候是有问题,疏忽了。看来还得继续讨论
[/Quote]
感觉上有可能的确是NP难问题……
LeonTown 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 106 楼 linren 的回复:]
(上接103楼)
【一个新的测试用例】
int g_iArr[] ={-96,31,32,33,1,-2,5};
GetSubArr(4, num);
Min Abs Sum: 35
They are:31 1 -2 5
Press any key to continue

答案应该是:
[33, 32, 31, -96], |SUM|=0
[/Quote]

如果在我的基础上,
先对数列按绝对值,做一下从小到大的排序,
会有效果吗?
加载更多回复(106)
内容简介 · · · · · · 《我怎样解题》共分为五章,分别为:第一章,不等式的证明;第二章,几何;第三章,数论;第四章,组合数学;第五章,数列、函数及其他。适用于数学奥林匹克选手和教练员参考使用,亦可供广大数学爱好者研读。 目录 · · · · · · 第一章 不等式的证明 1 Janous不等式 2 不等式与恒等式 3 调 整 4 还是调整 5 分而治之 6 两种相等的情况 7 柯西不等式 8 用柯西不等式“通分” 9 老老实实去分母 10 还是上次的办法 11 加强归纳假设 12 估计上界、下界 13 挤 挤 紧 14 又逢等差数列 15 一题多解 16 和比积好 17 最小的参数 18 放宽些又何妨 19 三角不等式 20 绝对值的不等式 21 n维向量 22 拉格朗日配方法 23 截 搭题 24 自己想办法 25 题目有误 26 凸 函 数 27 二次形式 第二章 几何 1 四边形的中高线 2 四圆共点 3 四个内切圆 4 三线共点 5 外接三角形 6 位似 7 经过定点 8 剪成锐角三角形 9 方程帮忙 10 征解问题 11 外公切线围成菱形 l2 射影平分周长 13 勾三股四弦五 14 分断式命题 15 解析几何 16 两角相等 17 做过三次的题 18 富瑞基尔定理 19 轴对称 20 表示比值 21 旁心 22 结论强,解法简 23 高与中线 24 又一个几何不等式 25 平面向量的有限集合 26 向量的应用 27 内 心 28 平分周长 29 n个向量的和 30 寺庙中的几何题 31 四点共圆 32 极点与极线 33 帕斯卡定理 34 三线共点 35 正确地提出问题 第三章 数论 1 正因数的个位数字的和 2 最小公倍数的最小值 3平方是有理数 4 和被2n整除 5 形如| 3b—2a|的数 6 分数与小数 7 走自己的路 8 取整函数 9 不断地变更问题 10 同余方程组 11 三个连续的正整数 12 互不同余 13 各行的乘积能否相等 14 质数的幂次 15 连中三元 l6 应当自己去想 17 忘却了的显然 18 解不会太多 l9 最小剩余 20 惊鸿一瞥 21 费马小定理 22 约数排圈 23 一半是9 24 最小的A 25 都是质数 26 小数部分 27 越来越多 28 一个整除问题 29 估计 30 知识障 31 数字和 32 运用三进制 33 不在其中 第四章 组合数学 1 取棋子 2 老虎与驴子 3 抽屉原理 4 似难实易 5 三箱倒球 6 直尺上标刻度 7 圆周排数 8 虽不中,亦不远矣! 9 意义何在 10 元素的和 11 |X|的最小值 12 平面格点 13 圆桌会议 14 红圈加蓝圈 150 ,1数表 16 正有理数集的分拆 17 两部分图 18 填 ±1 19 三角形剖分 20 好想法要贯彻到底 21 映射的个数 22 线段染色 23 总和为0 24 吴伟朝先生的名片 25 车站个数 第五章 数列、函数及其他 1 吴康先生的方程组 2 猜答案 3 还是猜 4 概率问题 5 表为平方和 6 n是3的幂 7 几项整数 8 项项是平方 9 推广 10 整数之和 …… 编辑手记

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧